不理解错哪,样例一直输出3
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
string a1[9];
int a[9][9];
int tx1=0,ty1=0,tx2=0,ty2=0;
int dx[5]={1,0,-1,0};
int dy[5]={0,1,0,-1};
int xx,yy,xxx,yyy;
int sd;
int cha(){
// for(int i=1;i<=4;i++){
// for(int j=1;j<=4;j++){
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
for(int i=1;i<=4;i++){
if((a[1][i]==a[2][i]&&a[2][i]==a[3][i]&&a[3][i]==a[4][i])||(a[i][1]==a[i][2]&&a[i][2]==a[i][3]&&a[i][3]==a[i][4])){
//cout<<"giao1";
return 1;
}
}
if((a[1][1]==a[2][2]&&a[2][2]==a[3][3]&&a[3][3]==a[4][4])||(a[1][4]==a[2][3]&&a[2][3]==a[3][2]&&a[3][2]==a[4][1])){
//cout<<"giao2";
return 1;
}
return 0;
}
int dfs(int tx1,int ty1,int tx2,int ty2,int dep,int sq){//dep深度,sq上个啥棋
//cout<<"giao";
if(dep==sd){
if(cha()==1){
return 1;
}else{
return 0;
}
}
for(int i=0;i<=3;i++){
xx=tx1+dx[i];
yy=ty1+dy[i];
xxx=tx2+dx[i];
yyy=ty2+dy[i];
if(xx>0&&xx<=4&&yy>0&&yy<=4&&a[xx][yy]!=sq){
swap(a[xx][yy],a[tx1][ty1]);
if(dfs(xx,yy,tx2,ty2,dep+1,(sq==1?2:1))==1)return 1;
swap(a[tx1][ty1],a[xx][yy]);//换回来不影响下边的
}
if(xxx>0&&xxx<=4&&yyy>0&&yyy<=4&&a[xxx][yyy]!=sq){
swap(a[xxx][yyy],a[tx2][ty2]);
if(dfs(tx1,ty1,xxx,yyy,dep+1,(sq==1?2:1))==1)return 1;
swap(a[tx2][ty2],a[xxx][yyy]);
}
}
return 0;
}
int main(){
for(int i=1;i<=4;i++){
cin>>a1[i];
for(int j=0;j<=3;j++){
if(a1[i][j]=='B'){//黑
//cout<<"B";
a[i][j+1]=2;
}else if(a1[i][j]=='W'){
//cout<<"W";
a[i][j+1]=1;
}else{
a[i][j+1]=0;
//cout<<"O";
if(tx1==0){
tx1=i;ty1=j+1;
}else{
tx2=i;ty2=j+1;
}
}
}
//cout<<endl;
}
for(int i=1;;i++){
sd=i;
if(dfs(tx1,ty1,tx2,ty2,0,1)==1)break;
if(dfs(tx1,ty1,tx2,ty2,0,2)==1)break;
}
cout<<sd;
return 0;
}