您的位置:首页 > 其它

HDU 1045 Fire Net

2012-02-01 14:45 218 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1045

DFS

我的代码

#include <stdio.h>
const int N=5;
char maze

;
int vis

;
int n,ans;
int ok(int x,int y)
{
if (maze[x][y]=='X') return 0;
int i;
for (i=x+1;i<n && maze[i][y]!='X';i++)
if (vis[i][y]) return 0;
for (i=x-1;i>=0 && maze[i][y]!='X';i--)
if (vis[i][y]) return 0;
for (i=y+1;i<n && maze[x][i]!='X';i++)
if (vis[x][i]) return 0;
for (i=y-1;i>=0 && maze[x][i]!='X';i--)
if (vis[x][i]) return 0;
return 1;
}
void dfs(int p,int s)
{
if (p==n*n)
{
if (s>ans) ans=s;
return;
}
int x=p/n,y=p%n;
dfs(p+1,s);
vis[x][y]=1;
if (ok(x,y)) dfs(p+1,s+1);
vis[x][y]=0;
}
int main()
{
int i;
while (scanf("%d",&n),n)
{
ans=0;
for (i=0;i<n;i++) scanf("%s",maze[i]);
dfs(0,0);
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: