您的位置:首页 > 其它

POJ2386 Lake Counting(DFS,八连通块)

2017-09-02 21:09 211 查看
POJ2386

题意分析:

八连通块题,从任意的W开始,不停的把邻接的部分用’.’代替。1次DFS后与初始的这个W相连的所有W就都被替代成了’.’。因此直到格子里面没有W为止。总共进行的DFS就是连通块的个数。

相似的题目,HDOJ1241同样是一道八连通块问题。

#include<iostream>
#include<string.h>
#include<cstring>
using namespace std;
#define maxn 1010
int i,j,n,m;
char mp[maxn][maxn];
void dfs(int x,int y){
//将现在的位置替换为'.'
mp[x][y]='.';
//循环遍历移动8个方向
int dx,dy;
for(dx=-1;dx<=1;dx++){
for(dy=-1;dy<=1;dy++){
int nx=x+dx,ny=y+dy;
if(0<=nx &&nx<n &&0<=ny&&ny<m&& mp[nx][ny]=='W')
dfs(nx,ny);
}
}
//return;
}
int main(){
while(scanf("%d%d",&n,&m)&&n){
for(i=0;i<n;i++)
scanf("%s",mp[i]);
int cnt=0;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
//从有W的地方开始dfs
if(mp[i][j]=='W'){
dfs(i,j);
cnt++;
}
}
}
cout<<cnt<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: