dfs()水题:
#include<stdio.h>
#include<string.h>
int m,n;
char maze[105][105];
int dfs(int a,int b)
{//深度遍历图结构,遍历完一次,说明图的区块加1 ,
int i;
int x,y;
int movex[]={-1,0,1,-1,1,-1,0,1};
int movey[]={1,1,1,0,0,-1,-1,-1};
if(maze[a][b]=='*')
return 0;
else
{
maze[a][b]='*';//标记遍历过了
for(i=0;i<8;i++)
{
x=a+movex[i];
y=b+movey[i];
if(x>=0&&y>=0&&x<m&&y<n&&maze[x][y]=='@')//不能超出范围
dfs(x,y);//深度遍历
}
}
return 1;//遍历完一个区块
}
int main()
{
int result;
int i,j;
while(scanf("%d %d",&m,&n)!=EOF&&m)
{
getchar();//接受换行
for(i=0;i<m;i++)
scanf("%s",maze[i]);
result=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
result+=dfs(i,j);
printf("%d\n",result);
}
return 0;
}