深度搜索,又是dfs:
这是一道比较经典的深度搜索的题,也是一道深度搜索的模板题:
我们先来读题:”w'是水,‘.’是干地;这道题想要我们来找出‘w'构成的几个水潭;
#include<bits/stdc++.h>
using namespace std;
char a[1010][1010];
int count1=0,n,m;;
int dre[8][2]={{1,0},{-1,0},{0,-1},{0,1},{1,1},{-1,-1},{1,-1},{-1,1}};//表示8个方向;
int dfs(int x,int y){
a[x][y]='.';//当我们没走过一又水的位置,我们就把他换成干地,防止再吃走到这个位置,会重复算出水潭;
for(int i=0;i<8;i++){//开始向各个方向找水的地方
int nx=x+dre[i][0];
int ny=y+dre[i][1];
if(a[nx][ny]=='W'&&nx>=0&&ny>=0&&nx<n&&ny<m){//找出与w相连的所有w,并且不超过边界;
dfs(nx,ny);
}
}
}
int main()
{
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++){//打印地图;
for(int j=0;j<m;j++){
cin>>a[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]=='W'){遇到应该水,就进行周围搜索
count1++;
dfs(i,j);
}
}
}
printf("%d\n",count1);
return 0;
}