#include#include#include#include
using namespacestd;int dir[4] = {-3, 3, -1, 1}; //x, y 上 -3 下 +3 左 -1 右 +1
int fa[10] = { 1, 1, 2, 6, 24};int status[400000]; //记录每种状态//test
int testid = -1;char test[400000][12];structNode{char s[12];intstatus;intpos;intstep;
vectorids;
};voidgetfa(){for(int i = 5; i<=9; ++i){
fa[i]= fa[i-1] *i;
}
}int cantor(char *s){int ans = 0;for(int i=0;i<9;++i){int num = 0;for(int j=i+1;j<9;++j){if(s[j]
}//cout << " num " << num << endl;
ans = ans + num*fa[8-i];
}returnans;
}voidbfs(){
Node beginnode;char end[12], temps[12]; //初始位置
scanf("%s%s", beginnode.s, end);
beginnode.status=cantor(beginnode.s);for(int i=0;i<9;++i){if(beginnode.s[i]=='.'){
beginnode.pos=i;break;
}
}
beginnode.step= 0;int endc =cantor(end);
queueq; beginnode.ids.push_back(++testid);for(int k=0;k<9;++k){
test[testid][k]=beginnode.s[k];
}
q.push(beginnode);
status[beginnode.status]= 1;while(!q.empty()){
Node cur=q.front();//for(int i=0;i<9;++i) cout << cur.s[i];//cout << " " << cur.status << endl;//for(int i=0;i<9;++i){//if(i%3==0){//cout << endl;//}//cout << cur.s[i];//}//cout << endl;//getchar();
q.pop();if(endc ==cur.status){for(int kk=0;kk
cout<
}
cout<
}
cout<
}return;
}
Node addnode;for(int i=0;i<4;++i){int np = cur.pos +dir[i];if(np>=0 && np<=8){for(int j=0;j<9;++j){
addnode.s[j]=cur.s[j];
}
addnode.s[cur.pos]=cur.s[np];
addnode.s[np]=cur.s[cur.pos];
addnode.status=cantor(addnode.s);if(status[addnode.status] == 0){
addnode.pos=np;
addnode.step= cur.step+1;
status[addnode.status]= 1;/
addnode.ids.assign(cur.ids.begin(), cur.ids.end());
addnode.ids.push_back(++testid);for(int k=0;k<9;++k){
test[testid][k]=addnode.s[k];
}
q.push(addnode);
}
}
}
}
printf("-1");
}intmain(){
memset(status,0, sizeof(status));
getfa();
bfs();return 0;
}