关于unordered_map的使用
#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
string start,End;
queue<string> T;
unordered_map<string,int> dr;
int anx[4]={0,0,1,-1};
int anY[4]={1,-1,0,0};
int bfs(string start){
dr[start]=1;
T.push(start);
while(T.size()){
string t=T.front();
T.pop();
int dis=dr[t];
if(t==End) return dis-1;
int k=t.find('x');
int x=k/3;
int y=k%3;
for(int i=0;i<4;i++){
int x1=x+anx[i];
int y1=y+anY[i];
if(x1>-1&&x1<3&&y1>-1&&y1<3){
swap(t[k],t[x1*3+y1]);
if(!dr.count(t)){
dr[t]=dis+1;
T.push(t);
}
swap(t[k],t[x1*3+y1]);
}
}
}
return -1;
}
int main(){
End="12345678x";
for(int i=1;i<10;i++){
char ch;
cin>>ch;
start+=ch;
}
printf("%d",bfs(start));
return 0;
}

浙公网安备 33010602011771号