以下是代码:
#include<bits/stdc++.h>
using namespace std;
string s;
int a[3][3],top[3][3]={1,2,3,8,0,4,7,6,5},dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},sx,sy,minn=25;
int check(){
int flag=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(a[i][j]!=top[i][j]){
flag++;
}
}
}
if(flag==0){
return 0;
}
else{
return flag;
}
}
bool memory(int st){
if(check()+st>minn){
return 1;
}
return 0;
}
void DFS(int x,int y,int z){
if(!check()){
minn=z;
return;
}
if(memory(z)){
return;
}
for(int i=0;i<=3;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>=0&&xx<=2&&yy>=0&&yy<=2){
swap(a[x][y],a[xx][yy]);
DFS(xx,yy,z+1);
swap(a[x][y],a[xx][yy]);
}
}
return;
}
int main(){
cin>>s;
int k=0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
a[i][j]=int(s[k]-48);
if(int(s[k]-48)==0){
sx=i;
sy=j;
}
k++;
}
}
DFS(sx,sy,0);
cout<<minn;
return 0;
}
哪位大佬能帮帮本萌新啊球球了!!!