题意:(dfs水题)
一个n*m的矩阵,每个@点周围的8个相邻的点也是@
就说明他们是连在一起的水洼,求一共有多少水洼。
分析:
dfs从前到后遍历的搜索,搜到一个就将其改为*以防重复计数
然后在遍历的过程中记录一下水洼的数目即可。
#include <iostream>
#include <cstdio>
using namespace std;
const int maxn = 105;
int m,n;
//int dx[4]={-1,0,0,1},dy[4]={0,1,-1,0};
char grid[maxn][maxn];
void dfs(int x,int y)
{
grid[x][y]='*';
int nx,ny,dx,dy;
for(dx=-1;dx<=1;dx++)
{
for(dy=-1;dy<=1;dy++)
{
nx=dx+x; ny=dy+y;
if(nx>=0&&nx<m&&ny>=0&&ny<n&&grid[nx][ny]=='@')
{
dfs(nx,ny);
}
}
}
return ;
}
int main()
{
int ans;
//freopen("in.txt","r",stdin);
while((scanf("%d%d",&m,&n)!=EOF)&&m)
{
ans=0;
int i,j;
for(i=0;i<m;i++)
{
getchar();
for(j=0;j<n;j++)
scanf("%c",&grid[i][j]);
}
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
if(grid[i][j]=='@')
{
dfs(i,j);
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}