题解 | #密码锁#(深度必超时 玛雅人不超时因为字符串短)
密码锁
https://www.nowcoder.com/practice/7da5fb77ba2e462c909fbff8f61584be
#include<iostream> #include<vector> #include<string> #include<algorithm> #include<queue> #include<map> using namespace std; struct ele //记录层数 { string str; int step; }; int BFS(string s) //广度搜索 { map<string, int> visited; //访问标记数组 queue<ele> con; //保存数据队列 ele k; k.str = s; k.step = 0; con.push(k); visited[s] = 1; int step = -1; while (!con.empty()) { ele z = con.front(); con.pop(); if (z.str.find("2012") != string::npos) { step = z.step; break; } else { z.step++; for (int i = 0; i < z.str.size() - 1; i++) { swap(z.str[i], z.str[i + 1]); if (visited.find(z.str) == visited.end()) { con.push(z); visited[z.str] = 1; } swap(z.str[i], z.str[i + 1]); } } } return step; } int main() { int n; while (cin >> n) { string s; cin >> s; cout << BFS(s) << endl; } }