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

还是深搜,还是陈题。

这次的发现是:

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)