棋盘

zhm123 老师 2020-10-14 14:55:48 3
#include <iostream>
using namespace std;
int n,m,a[110][110],b[110][110];
bool f()
{
	int ok=1;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]==1)
			{
				if(a[i+1][j]==0) a[i+1][j]=-1;
				if(a[i][j+1]==0) a[i][j+1]=-1; 
			}
			if(a[i][j]==-1)
			{
				if(a[i+1][j]==0) a[i+1][j]=1;
				if(a[i][j+1]==0) a[i][j+1]=1;
			}
			if(i<n && j<m && a[i+1][j]!=a[i][j+1])
			{
				ok=0;
				break;
			}
			if(i==n && j<m && a[i][j]==a[i][j+1])
			{
				ok=0;
				break;
			}
			if(i<n && j==m && a[i+1][j]==a[i][j])
			{
				ok=0;
				break;
			}
		}
	}
	if(ok) return true;
	else return false;
 } 
 
string s()
 {
 	if(f()) return "Possible";
 	else return "Impossible";
 }
int main()
{
	char c;
	while(cin>>n>>m)
	{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>c;
			if(c=='W') a[i][j]=1;      //1是黑
			else if(c=='B') a[i][j]=-1;//-1是白
			else a[i][j]=0;            //0是无 
		}
	}
	if(a[1][1]!=0) cout <<s()<<endl;
	else 
	{
		a[1][1]=1; //黑
		if(!f()) 
		{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=m;j++) b[i][j]=a[i][j];	
		}
			a[1][1]=-1;//白
		}
		cout <<s()<<endl;
	}	
	}
	return 0;
}
{{ vote && vote.total.up }}