题目描述
由于最近下雨,水已集中在Farmer John田野的不同地方,由N×M(1 <= N <= 100; 1 <= M <= 100)个正方形的矩形表示。每个广场包含水('W')或旱地('。')。农夫约翰想弄清楚他的田地里有多少个池塘。一个池塘与其中的水相连,其中一个广场被认为与所有八个邻居相邻。
根据Farmer John的领域图,确定他有多少个池塘。
输入
*第1行:两个空格分隔的整数:N和M
*第2..N + 1行:每行代表农夫约翰田地的一行的M个字符。每个字符都是'W'或'。'。角色之间没有空格。
*第2..N + 1行:每行代表农夫约翰田地的一行的M个字符。每个字符都是'W'或'。'。角色之间没有空格。
输出
* 1号线:约翰农场的池塘数量。
样例输入
5 5
....W
.WW.W
.W..W
WWW.W
WW..W
样例输出
2
#include <iostream> int M,N; using namespace std; void find(char a[100][100],int n,int m)//判断该处是否为一个油田 { if(a[n][m]=='.'||n<0||m<0||m>M-1||n>N-1) return;//如果该处已经被采集 将其变为石头 a[n][m]='.'; //采集该处 find(a,n-1,m-1);//向八个方向进行搜索 find(a,n-1,m); find(a,n-1,m+1); find(a,n,m-1); find(a,n,m+1); find(a,n+1,m-1); find(a,n+1,m); find(a,n+1,m+1); return; } int main() { int i,j,count=0; cin>>N>>M; char a[100][100]={0};//传入油田 for(i=0;i<N;i++) for(j=0;j<M;j++) cin>>a[i][j]; for(i=0;i<N;i++)//找油田有多少块 for(j=0;j<M;j++) { if(a[i][j]=='W') { find(a,i,j); count++; } } cout<<count<<endl; return 0; }