描述
农夫约翰的农场可以表示成N*M(1≤N≤100≤M≤100)个方格组成的矩形。由于近日的降雨,在约翰农场上的不同地方形成了池塘。每一个方格或者有积水(‘W’)或者没有积水(’.’)。农夫约翰打算数出他的农场上共形成了多少池塘。一个池塘是一系列相连的有积水的方格,每一个方格周围的八个方格都被认为是与这个方格相连的。现给出约翰农场的图样,要求输出农场上的池塘数。
这题是一道深搜题,只需要注意一下有八个方位就行了;
下面出示代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,sum;
char a[105][105];
void shensoujichushuchitangsifangxiangUSACO(int x,int y){
if(x<1||x>n||y<1||y>m||a[x][y]=='.')return ;
if(a[x][y]=='W')a[x][y]='.';
shensoujichushuchitangsifangxiangUSACO(x-1,y);
shensoujichushuchitangsifangxiangUSACO(x+1,y);
shensoujichushuchitangsifangxiangUSACO(x,y-1);
shensoujichushuchitangsifangxiangUSACO(x,y+1);
shensoujichushuchitangsifangxiangUSACO(x-1,y-1);
shensoujichushuchitangsifangxiangUSACO(x+1,y-1);
shensoujichushuchitangsifangxiangUSACO(x-1,y+1);
shensoujichushuchitangsifangxiangUSACO(x+1,y+1);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='W'){
shensoujichushuchitangsifangxiangUSACO(i,j);
sum++;
}
}
}
cout<<sum;
return 0;
}