Description
Given a diagram of Farmer John's field, determine how many ponds he has.
Input
* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
Output
Sample Input
10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.....W. .W.W......W. ..W.......W.
Sample Output
3 解题思路:1 遍历每一个为‘W’的点,同时将其变成‘.',对它周围的八个方向进行遍历,如果为‘W’,则dfs 2 dfs的次数就是问题的答案。
#include<iostream>
using namespace std;
char pond[100][101];
int m;
int n;
void dfs(int x ,int y){
pond[x][y]='.';
for(int dx=-1;dx<=1;dx++)
for(int dy=-1;dy<=1;dy++){
int xx =x+dx;
int yy=y+dy;
if(xx<0||yy<0||xx>m||yy>n)
continue;
if( pond[xx][yy] =='W'){
dfs(xx,yy);
}
}
return ;
}
int main(){
scanf("%d%d",&m,&n);
int ans =0;
for(int i=0;i<m;i++)
scanf("%s",&pond[i]);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
if(pond[i][j]='W'){
dfs(i,j);
ans++;
}
cout<<ans<<endl;
return 0;
}