主函数里的push不知道为什么就是用不起,有没有大佬救一救我啊QAQ
#include<bits/stdc++.h>
using namespace std;
int jc[]={1,1,2,6,24,120,720,5040,40320,362880};
int ten[]={1,1,10,100,1000,10000,100000,1000000,10000000,100000000};
int da[]={0,1,2,3,4,5,6,7,8};
bool viss[5000000],vis[10];
int en=411854,st,tt,sx,sy,tx,ty,d[5000000];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int ma[4][4];
int zdx(int o){
for(int i=0;i<=8;i++)da[i]=i;
int sum=0,q,w=9;
while(w>0){
q=o/ten[w];
sum+=da[q]*jc[w];
o%=ten[w];
for(int i=q+1;i<=8;i++)da[i]--;
w--;
}
return sum;
}
int shu(int o){
int sum=0,q,w=9;
for(int i=0;i<=8;i++){
da[i]=i;
vis[i]=0;
}
while(w>0){
q=o/jc[w];
for(int i=0;i<=8;i++){
if(da[i]==q&&vis[i]==0){
q=i;
vis[q]=1;
break;
}
}
sum+=q*ten[w];
o%=jc[w];
for(int i=q+1;i<=8;i++)da[i]--;
w--;
}
return sum;
}
void cha(int o){
int w=9,i=1,j=1;
while(w>0){
ma[i][j]=o/ten[w];
o%=ten[w];
w--;
j++;
if(j==4){
i++;
j=1;
}
}
return;
}
int chaa(){
int sum=0,w=9,i=1,j=1;
while(w>0){
sum+=ma[i][j]*ten[w];
w--;
j++;
if(j==4){
i++;
j=1;
}
}
return sum;
}
queue<int> p;
int main(){
cin>>st;
vis[zdx(st)]=1;
d[zdx(st)]=0;
p.push(st);
while(!p.empty()){
st=shu(p.front());
p.pop();
cha(st);
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
if(ma[i][j]==0){
sx=i;
sy=j;
}
}
}
for(int i=0;i<4;i++){
tx=sx+dx[i];
ty=sy+dy[i];
if(!(tx>=1&&tx<=3&&ty>=1&&ty<=3))continue;
swap(ma[tx][ty],ma[sx][sy]);
tt=chaa();
if(vis[zdx(tt)]==0){
p.push(tt);
d[zdx(tt)]=d[zdx(st)]+1;
vis[zdx(tt)]=1;
cha(st);
}
}
}
cout<<d[en];
return 0;
}