一道简单的dfs
http://acm.hdu.edu.cn/showproblem.php?pid=1312
@为起点,#为墙,'.'为路,问你能到达的点有几个。
#include <stdio.h>
#include <string.h>
int n,m,max;
int sx,sy;
int dirx[5]={0,0,1,0,-1},diry[5]={0,1,0,-1,0};
char s[25][25];
void dfs(int x,int y)
{
if(x<1 || x>n || y<1 || y>m)
return ;
if(s[x][y]=='#')
return ;
max++;<span style="white-space:pre"> </span>//每到一个点,max++
for(int i=1;i<=4;i++)
{
int tx=x+dirx[i];
int ty=y+diry[i];
s[x][y]='#';<span style="white-space:pre"> </span>//走过直接标记为墙,因为以后不用重新走过了
dfs(tx,ty);
}
}
int main()
{
int i,j;
while(scanf("%d %d",&m,&n) && (n!=0 || m!=0))
{
max=0;
for(i=1;i<=n;i++)
{
scanf("%s",&s[i][1]);
for(j=1;j<=m;j++)
if(s[i][j]=='@')<span style="white-space:pre"> </span>//记录起点
sx=i,sy=j;
}
dfs(sx,sy);
printf("%d\n",max);
}
return 0;
}