有一个大小为 N×M 的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出
园子里总共有多少水洼?(八连通指的是下图中相对 W 的.的部分)
其中W是积水,.是干地
. . .
. W .
. . .
1
2
3
限制条件
N,M<=100
样例
输入
N=10, M=12
园子如下图('W’表示积水, '.'表示没有积水)
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
1
2
3
4
5
6
7
8
9
10
11
12
输出
3
#include<iostream>
using namespace std;
int n,m;
const int maxn=1e8+10;
char f[maxn][maxn];
void dfs(int x,int y){
f[x][y]='.';
for(int i=-1;i<=1;i++){
for(int j=-1;j<=1;j++){
int nx=i+x;
int ny=j+y;
if(f[nx][ny]=='M'&&nx>=0&&nx<n&&ny>=0&&ny<m){
dfs(nx,ny);
}
}
}
return;
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>f[i][j];
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(f[i][j]=='W'){
dfs(i,j);
res++;
}
}
}
cout<<res<<endl;
}

本文介绍了一种算法,用于解决一个关于大小为N×M的园子中,通过八联通判断积水区域,并计算有多少个独立的水洼问题。通过深度优先搜索遍历积水区域,给出了C++代码实现和一个示例。
1890

被折叠的 条评论
为什么被折叠?



