hdu 1045 Fire Net
//暴搜也0MS,因为数据只有4*4,不过更牛的做法是转为二分图的最大匹配,暂缺。。
#include <stdio.h>
#include <string.h>
#define MAXN 5
int n,ans,cnt;
char map[MAXN][MAXN];
bool isvalid(int x,int y)
{
map[x][y]='H';
int i,j;
bool h=false;
for(j=0; j<n; j++)
{
if(map[x][j]=='H')
{
if( h )
{
map[x][y]='.';
return false;
}
h=true;
}
if(map[x][j]=='X')
h=false;
}
h=false;
for(i=0; i<n; i++)
{
if(map[i][y]=='H')
{
if( h )
{
map[x][y]='.';
return false;
}
h = true;
}
if(map[i][y]=='X')
h=false;
}
return true;
}
void dfs(int r,int c)
{
if(r==n)
{
if(cnt>ans) ans=cnt;
return;
}
if(c==n)
{
if(cnt>ans) ans=cnt;
dfs(r+1,0);
return;
}
for(int j=c; j<n; j++)
{
if(map[r][j]=='.' && isvalid(r,j))
{
map[r][j]='H';
cnt++;
dfs(r,j+1);
map[r][j]='.';
cnt--;
}
}
dfs(r+1,0);
}
int main()
{
int i;
while(scanf("%d",&n),n)
{
ans=cnt=0;
for(i=0; i<n; i++) scanf("%s",map[i]);
dfs(0,0);
printf("%d\n",ans);
}
return 0;
}
浙公网安备 33010602011771号