点击打开链接
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include<string>
#include<cstring>
#include<algorithm>
#include<math.h>
#include<queue>
#include<vector>
using namespace std;
struct Node
{
string s;
int steps;
};
queue<Node>Q;
vector<int>visit;
string str;
//bool visit[1700000];
int N=0;
int hash_func(string ss)
{
int res=0,i=0;
for(i=0;i<ss.length();i++){
res=res*10+ss[i]-'0';
}
return res;
}
int check(string t)
{
int loc=t.find("2012",0);
if(loc!=string::npos) return 1;
else return 0;
}
void BFS()
{
int hash_val=0,j=0;
// memset(visit,0,sizeof(visit));//初始化
visit.clear();
while(!Q.empty()) Q.pop();///清空
Node n,t;
n.s=str; n.steps=0;
Q.push(n);
hash_val=hash_func(n.s);
visit.push_back(hash_val);
while(!Q.empty()){
n=Q.front();Q.pop();
if(check(n.s)) {
printf("%d\n",n.steps);
return;
}
for(int i=0;i<N-1;i++){
t=n;///很重要
swap(t.s[i],t.s[i+1]);//swap函数直接使用
hash_val=hash_func(t.s);
for(j=0;j<visit.size();j++){
if(visit[j]==hash_val) break;
}
if(j==visit.size()){
t.steps++;
Q.push(t);
visit.push_back(hash_val);
}
}
}
printf("-1\n");
}
int main()
{
while(scanf("%d",&N)!=EOF){
cin>>str;
BFS();
}
return 0;
}