您的位置:首页 > 其它

HDU 1045 Fire Net(DFS)

2012-07-20 21:13 309 查看
题目链接

普通的DFS。

#include <stdio.h>
#include <string.h>
char p[5][5];
int max,o[5][5],n;
int judge(int x,int y)
{
int i,z = 1;
for(i = x+1;i <= n-1;i ++)
{
if(o[i][y] == 2)
{
z = 0;
break;
}
else if(o[i][y] == 1)
break;
}
for(i = x-1;i >= 0;i --)
{
if(o[i][y] == 2)
{
z = 0;
break;
}
else if(o[i][y] == 1)
break;
}
for(i = y+1;i <= n-1;i ++)
{
if(o[x][i] == 2)
{
z = 0;
break;
}
else if(o[x][i] == 1)
break;
}
for(i = y-1;i >= 0;i --)
{
if(o[x][i] == 2)
{
z = 0;
break;
}
else if(o[x][i] == 1)
break;
}
return z;
}
void dfs(int x,int y,int step)
{
int r,c;
if(x > n-1)
{
if(max < step)
max = step;
return ;
}
if(y == n-1)
{
r = x+1;
c = 0;
}
else
{
r = x;
c = y+1;
}
if(o[x][y] == 0)
{
if(judge(x,y))
{
o[x][y] = 2;
dfs(r,c,step+1);
o[x][y] = 0;
dfs(r,c,step);
}
else
{
dfs(r,c,step);
}
}
else
dfs(r,c,step);
}
int main()
{
int i,j;
while(scanf("%d%*c",&n)!=EOF)
{
if(!n) break;
max = 0;
memset(o,0,sizeof(o));
for(i = 0; i <= n-1; i ++)
gets(p[i]);
for(i = 0; i <= n-1; i ++)
for(j = 0; j <= n-1; j ++)
{
if(p[i][j] == 'X')
o[i][j] = 1;
}
dfs(0,0,0);
printf("%d\n",max);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: