题解 | #密码锁# 恶心

密码锁

https://www.nowcoder.com/practice/7da5fb77ba2e462c909fbff8f61584be

#include <iostream>
#include <queue>
#include <unordered_map>
#include <algorithm>
using namespace std;

int n;
string s;

struct New_string{
    string s;
    int step;
    New_string(string s, int x): s(s), step(x){}
};

unordered_map<string, bool> visit;
void bfs(string s)
{
    queue<New_string> q;
    q.push(New_string(s, 0));
    visit[s] = true;
    while(!q.empty())
    {
        New_string tmp = q.front();
        q.pop();
        string tmp_s = tmp.s;
        if(tmp_s.find("2012") != string::npos)
        {
            cout << tmp.step << endl;
            return;
        }
        for(int i = 0; i < tmp_s.size() - 1; i++)
        {
            swap(tmp_s[i], tmp_s[i+1]);
            if(!visit[tmp_s])
            {
                q.push(New_string(tmp_s, tmp.step+1));
                visit[tmp_s] = true;
            }
            swap(tmp_s[i], tmp_s[i+1]);
        }
    }
    cout << -1 << endl;
}

int main() {
    while(cin >> n >> s)
    {
        visit.clear();
        bfs(s);
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务