求助WA on #2悬关
查看原帖
求助WA on #2悬关
786605
xgw120121楼主2024/6/11 20:03

讨论区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);
	}
}

求大佬帮助

2024/6/11 20:03
加载中...