您的位置:首页 > 其它

zoj 2165(hdu1312) Red and Black(深搜)

2011-02-11 00:31 323 查看
还是深搜,还是陈题。

这次的发现是:

1,代码的模块化的确是个好主意,这样的话,修改和读起来更方便了

2,搜索时,如果不初始化map[][]的话,就要特别注意边界问题,因为有可能上一组测试实例的地图较大,所以在新图读入的时候,边界以外就不再是0了,不注意的话可能会影响最后的结果

下面是代码:

#include<stdio.h>
int n,m,si,sj,count;
int dir[4][2]={0,1,0,-1,1,0,-1,0};
char map[21][21];
void getmap()
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%1s",&map[i][j]);
if(map[i][j]=='@'){ si=i; sj=j; }
}
}
int fj(int a,int b)
{
if(a<0||b<0||a>n-1||b>m-1)return 0;
else return 1;
}
void dfs(int a,int b)
{
int i;
if(!fj(a+dir[i][0] , b+dir[i][1]))return; //这里就要注意了,先判断边界,再看是否让count加一
count++; //因为起始点@也算在内,所以第一次dfs就可以加一了
map[a][b]='#';

for(i=0;i<4;i++)
{
if(map[a+dir[i][0] ][b+dir[i][1] ]=='.')
dfs( a+dir[i][0] , b+dir[i][1] );
}
return;
}
int main()
{
while(scanf("%d%d",&m,&n),n+m)
{
getmap();
count=0;
dfs(si,sj);
printf("%d/n",count);
}
return 0;
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试 ini