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的地方开始dfsif(mp[i][j]=='W'){dfs(i,j);cnt++;}}}cout<<cnt<<endl;
}return 0;
}