#include<stdio.h>
char T[101][101]={0};
int n,max=0;
int check(int k)
{
int r=k/n,flag1=0;
int c=k%n,flag2=0;
if(T[r][c]=='X')
return 0;
for(int i=r-1;i>=0;--i)
if(T[i][c]=='X')
break;
else if(T[i][c]=='1')
{
flag1=1;break;
}
for(int j=c-1;j>=0;--j)
if(T[r][j]=='X')
break;
else if(T[r][j]=='1')
{
flag2=1;break;
}
if(flag1==0&&flag2==0)
return 1;
return 0;
}
void checkmax()
{
int sum=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(T[i][j]=='1')
sum++;
if(sum>max)
max=sum;
}
void search(int k)
{
if(k==n*n)
checkmax();
else
{
if(check(k))
{
T[k/n][k%n]='1';search(k+1);
T[k/n][k%n]='.';search(k+1);
}
else
search(k+1);//不能填的,什么也不做
}
}
int main()
{
scanf("%d",&n);getchar();//剔除空格、换行符等
int i,j;
while(n!=0)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
scanf("%c",&T[i][j]);
getchar();
}
search(0);
printf("%d\n",max);max=0;
scanf("%d",&n);getchar();
}
return 0;
}
堡垒问题
最新推荐文章于 2023-03-20 21:42:44 发布