在一张地图上建立碉堡(X),要求每行没列不能放两个,除非中间有强挡着。求最多能放多少个碉堡
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 5
using namespace std; int n,ans;
char maps[N][N]; int judge(int x,int y)
{
int i;
if(maps[x][y]=='X')
return ;
for(i=y;i>=;i--)
{
if(maps[x][i]=='D')
return ;
if(maps[x][i]=='X')
break;
}
for(i=x;i>=;i--)
{
if(maps[i][y]=='D')
return ;
if(maps[i][y]=='X')
break;
}
return ;
} void DFS(int step,int k)
{
int x,y;
x=step/n;
y=step%n;
if(step==n*n)
{
ans=max(k,ans);
return ;
}
if(judge(x,y)==)
{
maps[x][y]='D';
DFS(step+,k+);
maps[x][y]='.';
}
DFS(step+,k);
} int main()
{
int i;
while(cin>>n,n)
{
for(i=;i<n;i++) cin>>maps[i]; ans=; DFS(,); cout<<ans<<endl;
}
return ;
}