题解-bfs | #密码锁#
密码锁
https://www.nowcoder.com/practice/7da5fb77ba2e462c909fbff8f61584be
#include <iostream>
#include <queue>
#include <unordered_map>
using namespace std;
int n;
int bfs(string st){
queue<string> q;
unordered_map<string, int> d;
q.push(st);
d[st] = 0;
while(q.size()){
auto t = q.front();
q.pop();
if(t.find("2012") != -1) return d[t];
for(int i = 0; i < t.size() - 1; i ++){
string r = t;
swap(r[i], r[i + 1]);
if(d.count(r) == 0){
q.push(r);
d[r] = d[t] + 1;
}
}
}
return -1;
}
int main(){
while(cin>>n){
string s;
cin>>s;
cout<<bfs(s)<<endl;
}
return 0;
}

