您的位置:首页 > 其它

POJ 1562 dfs求连通分量的个数

2013-03-27 21:48 477 查看
题意:求连通分量的个数

分析:直接用dfs,每次返回一次,sum++;

View Code

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = 110;
char str[maxn][maxn];
int xx,yy;
int n,m;
int sum;
int dir[8][2]={{-1,1},{0,1},{1,1},{-1,0},{1,0},{-1,-1},{0,-1},{1,-1}};

void dfs(int si,int sj){
str[si][sj]='*';
for(int i=0;i<8;i++){
xx=si+dir[i][0];
yy=sj+dir[i][1];
if(xx<0||yy<0||xx>=m||yy>=n){
continue;
}
if(str[xx][yy]=='@'){
dfs(xx,yy);
}
}
}

int main(){
while(scanf("%d",&m)!=EOF){
if(m==0) break;
scanf("%d",&n);
for(int i=0;i<m;i++){
scanf("%s",str[i]);
}
sum=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(str[i][j]=='@'){
dfs(i,j);
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: