只因你太美

刘星辰liuxingchen  •  1年前


#include<bits/stdc++.h>
using namespace std;
int n;
char c[30][30];
int Max;
int used[30][30];
bool b;
void dfs(int now)
{
	Max=max(Max,now);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			b=1;
			if(used[i][j]==0)
			{
				for(int k=i-1;k>=1;k--)
				{
					if(used[k][j]==2)
					{
						b=0;
						break;
					}
					if(used[k][j]==1)
					{
						break;
					}
				}
				if(b==0)
				{
					continue;
				}
				for(int k=i+1;k<=n;k++)
				{
					if(used[k][j]==2)
					{
						b=0;
						break;
					}
					if(used[k][j]==1)
					{
						break;
					}
				}
				if(b==0)
				{
					continue;
				}
				for(int k=j-1;k>=1;k--)
				{
					if(used[i][k]==2)
					{
						b=0;
						break;
					}
					if(used[i][k]==1)
					{
						break;
					}
				}
				if(b==0)
				{
					continue;
				}
				for(int k=j+1;k<=n;k++)
				{
					if(used[i][k]==2)
					{
						b=0;
						break;
					}
					if(used[i][k]==1)
					{
						break;
					}
				}
				if(b==0)
				{
					continue;
				}
				used[i][j]=2;
				dfs(now+1);
				used[i][j]=0;
			}
		}
	}
}
int main()
{
	freopen("conflict.in","r",stdin);
	freopen("conflict.out","w",stdout);
	while(cin>>n)
	{
		if(n==0)
		{
			return 0;
		}
		Max=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				cin>>c[i][j];
				used[i][j]=0;
				if(c[i][j]=='X')
				{
					used[i][j]=1;
				}
			}
		}
		dfs(0);
		cout<<Max;
		cout<<endl;
	}
	return 0;
}

评论: