测试点里只3个AC,其他都是MLE
#include <bits/stdc++.h>
using namespace std;
struct sk{
string s;
int step;
};
string n;
int g=3;
queue<sk> q;
string ss(string x,int f,int a){
if(f==1){//上
if(a/3==0){
return x;
}
else{
char s1;
s1=x[a];
x[a]=x[a-g];
x[a-g]=s1;
}
return x;
}
if(f==2){//下
if(a/3==g-1){
return x;
}
else{
char s1;
s1=x[a];
x[a]=x[a+g];
x[a+g]=s1;
}
return x;
}
if(f==3){//左
if(a%3==0){
return x;
}
else{
char s1;
s1=x[a];
x[a]=x[a-1];
x[a-1]=s1;
}
return x;
}
if(f==4){//右
if(a%3==g-1){
return x;
}
else{
char s1;
s1=x[a];
x[a]=x[a+1];
x[a+1]=s1;
}
return x;
}
}
int main() {
cin>>n;
q.push({n,0});
while(!q.empty()){
sk sum=q.front();
string m=sum.s;
q.pop();
if(m=="123804765"){
cout<<sum.step;
return 0;
}
int a=-1;
for(int i=0;i<g*g;i++){
if(m[i]=='0'){
a=i;
break;
}
}
for(int i=1;i<=4;i++){
m=ss(m,i,a);
if(m!=sum.s){
q.push({m,sum.step+1});
}
m=sum.s;
}
}
return 0;
}