#include <stdio.h>
#include <string.h>
#define MAXN 5
int n,max,m;//max表示碉堡的最多数量 m表示当前的碉堡数量
char map[MAXN][MAXN];
bool check(int r,int c)
{
map[r][c]='H';
bool b=false;
for(int i=0;i<n;i++){
if(map[i][c]=='H'){
if(b){
map[r][c]='.';
return false;
}
b=true;
}
if(map[i][c]=='X')
b=false;
}
b=false;
for( i=0;i<n;i++){
if(map[r][i]=='H'){
if(b){
map[r][c]='.';
return false;
}
b=true;;
}
if(map[r][i]=='X')
b=false;
}
return true;
}
void dfs(int r,int c)//r表示行,c表示列
{
if(r==n){
if(max<m)
max=m;
return ;
}
else if(c==n){
if(max<m)
max=m;
dfs(r+1,0);
return ;
}
for(int i=c;i<n;i++){
if(map[r][i]=='.' && check(r,i)){
map[r][i]='H';
m++;
dfs(r,i+1);
map[r][i]='.';
m--;
}
}
dfs(r+1,0);
}
int main()
{
int i;
while(scanf("%d",&n),n)
{
max=m=0;
for(i=0; i<n; i++)
scanf("%s",map[i]);
dfs(0,0);
printf("%d\n",max);
}
return 0;
}
hdu 1045 Fire Net 跟N皇后差不多 果断暴搜
最新推荐文章于 2022-02-25 19:38:17 发布