求助QwQ
#include<bits/stdc++.h>
using namespace std;
struct Node{string s;int steps;};
string S;
map<string,bool> vst;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int bfs(){
if(S=="123804765") return 0;
queue<Node> q;
q.push((Node){S,0});
vst[S]=1;
while(q.size()){
Node u=q.front(); q.pop();
int x,y;
for(int i=0;i<9;i++)
if(u.s[i]=='0') x=i/3,y=i%3;
Node v=(Node){u.s,u.steps+1};
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<0||ny<0||nx>2||ny>2) continue;
swap(v.s[x*3+y],v.s[nx*3+ny]);
if(vst[v.s]) continue;
if(v.s=="123804765") return v.steps;
q.push(v);
vst[v.s]=1;
swap(v.s[x*3+y],v.s[nx*3+ny]);
}
}
return -1;
}
int main(){
cin>>S;
cout<<bfs()<<endl;
return 0;
}