hud 1312 搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1312
方法一:广度优先搜索。
利用队列“先进先出 FIFO”的特点(本例用数组queue和标记L等效一个队列),距离起点越近越先被搜索,适合计算消费与距离成比例的问题。
#include<stdio.h>#define N 25int flag[N][N],count,W,H;int dir[4][2]={1,0, 0,1, -1,0, 0,-1};void DFS(int x,int y){ int next_x,next_y,i; for(i=0;i<4;i++) { next_x=x+dir[i][0]; next_y=y+dir[i][1]; flag[y][x]=1; if(flag[next_y][next_x]==0&&next_x>=0&&next_x<W&&next_y>=0&&next_y<H) { count++; DFS(next_x,next_y); } }}int main(){ int i,j,x,y; char t; while(scanf("%d%d",&W,&H),W||H) { for(i=0;i<H;i++) { getchar(); for(j=0;j<W;j++) { scanf("%c",&t); if(t=='.') flag[i][j]=0; if(t=='#') flag[i][j]=1; if(t=='@) { x=j; y=i; count=1; //注意count初始化一定不要放在dfs函数中,否则递归调用时会不停初始化 } } } DFS(x,y); printf("%d\n",count); } return 0;}