一道DFS题目,参考了书本上递归求解DFS的思路用递归做了一下,感觉比非递归简洁多了。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define STOP system("pause")
int a[105][105],vis[105][105];
void dfs(int x,int y)
{
if(a[x][y]&&vis[x][y]==0)
{
vis[x][y]=1;
dfs(x-1,y-1);dfs(x-1,y);dfs(x-1,y+1);
dfs(x,y-1); dfs(x,y+1);
dfs(x+1,y-1);dfs(x+1,y);dfs(x+1,y+1);
}
}
int main()
{
int m,n,i,j,count;
char s[105];
while(scanf("%d%d",&m,&n),m)
{
count=0;
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
for(i=0;i<m;i++)
{
scanf("%s",s);
for(j=0;j<n;j++)
{
if(s[j]=='@')
a[i+1][j+1]=1;
}
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]&&!vis[i][j])
{
count++;
dfs(i,j);
}
printf("%d\n",count);
}
return 0;
}