讨论区hack数据和样例都过了,但WA on #2 求助。
#include<bits/stdc++.h>
using namespace std;
const int dx[]={0,0,0,1,-1};
const int dy[]={0,1,-1,0,0};
int dep,b[10][10],sx1,sx2,sy1,sy2;
string st;
int check()
{
for(int i=1;i<=4;i++)
{
int bo=1;
for(int j=2;j<=4;j++)
if(b[i][j]!=b[i][j-1])
{
bo=0;
break;
}
if(bo) return 1;
}
for(int i=1;i<=4;i++)
{
int bo=1;
for(int j=2;j<=4;j++)
if(b[j-1][i]!=b[j][i])
{
bo=0;
break;
}
if(bo) return 1;
}
if(b[1][1]==b[2][2]&&b[1][1]==b[3][3]&&b[1][1]==b[4][4]) return 1;
if(b[1][4]==b[2][3]&&b[1][4]==b[3][2]&&b[1][4]==b[4][1]) return 1;
return 0;
}
void dfs(int x,int y,int xx,int yy,int c,int k)
{
if(k>dep)
{
if(check())
{
cout<<dep<<endl;
exit(0);
}
return;
}
for(int i=1;i<=4;i++)
{
int cx=dx[i]+x,cy=dy[i]+y;
if(cx<1||cx>4||cy<1||cy>4||b[cx][cy]==c||b[cx][cy]==-1) continue;
swap(b[cx][cy],b[x][y]);
dfs(cx,cy,xx,yy,c^1,k+1);
swap(b[cx][cy],b[x][y]);
}
for(int i=1;i<=4;i++)
{
int cx=dx[i]+xx,cy=dy[i]+yy;
if(cx<1||cx>4||cy<1||cy>4||b[cx][cy]==c||b[cx][cy]==-1) continue;
swap(b[cx][cy],b[xx][yy]);
dfs(x,y,cx,cy,c^1,k+1);
swap(b[cx][cy],b[xx][yy]);
}
}
int main()
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=4;j++)
{
char ch=getchar();
if(ch=='B') b[i][j]=1;
if(ch=='W') b[i][j]=0;
if(ch=='O')
{
b[i][j]=-1;
if(!sx1) sx1=i,sy1=j;
else sx2=j,sy2=j;
}
}
getline(cin,st);
}
for(dep=0;;dep++)
{
dfs(sx1,sy1,sx2,sy2,1,1);
dfs(sx1,sy1,sx2,sy2,0,1);
}
}
求大佬帮助