八數碼
阿新 • • 發佈:2020-08-28
inline bool check(int x,int y) { return x>=0 && x<3 && y>=0 && y<3; } void print(string s) { for(int i=0;i<3;i++) { for(int j=0;j<3;j++) cout<<s[i*3+j]<<' '; cout<<endl; } cout<<endl; } int bfs(string s) { queue<string> q; unordered_map<string,int> dist; dist[s]=0; q.push(s); while(q.size()) { string t=q.front(); q.pop(); // print(t); if(t == "12345678x") return dist[t]; int pos=t.find('x'); int x=pos/3,y=pos%3; for(int i=0;i<4;i++) { int a=x+dx[i],b=y+dy[i]; if(!check(a,b)) continue; int npos=a*3+b; string str=t; swap(str[pos],str[npos]); if(!dist.count(str)) { dist[str]=dist[t]+1; q.push(str); } } } return -1; } int main() { string line; getline(cin,line); stringstream ss(line); string a; char c; while(ss>>c) a+=c; cout<<bfs(a)<<endl; //system("pause"); }