//poj 1315
//sep9
#include <iostream>
using namespace std;
int n;
char g[8][8];
int tmp[8][8];
bool check()
{
for(int i=0;i<n;++i){
int flag=0;
for(int j=0;j<n;++j){
if(g[i][j]=='X'&&tmp[i][j]==0){
flag=0;
}
else if(g[i][j]=='X'&&tmp[i][j]==1){
return false;
}else if(g[i][j]=='.'&&tmp[i][j]==0){
;
}else if(g[i][j]=='.'&&tmp[i][j]==1){
if(flag==0)
flag=1;
else
return false;
}
}
}
for(int j=0;j<n;++j){
int flag=0;
for(int i=0;i<n;++i){
if(g[i][j]=='X'&&tmp[i][j]==0){
flag=0;
}
else if(g[i][j]=='X'&&tmp[i][j]==1){
return false;
}else if(g[i][j]=='.'&&tmp[i][j]==0){
;
}else if(g[i][j]=='.'&&tmp[i][j]==1){
if(flag==0)
flag=1;
else
return false;
}
}
}
return true;
}
int main()
{
while(scanf("%d",&n)==1&&n){
for(int i=0;i<n;++i)
scanf("%s",g[i]);
int m=n*n,ans=0;
for(int i=0;i<(1<<m);++i){
int cnt=0;
for(int j=0;j<m;++j){
cnt+=(i>>j)&1;
tmp[j/n][j%n]=(i>>j)&1;
}
if(check())
ans=max(ans,cnt);
}
printf("%d\n",ans);
}
return 0;
}
poj 1315 Don't Get Rooked 暴力枚举
最新推荐文章于 2020-09-03 17:44:43 发布