POJ 1562 dfs求连通分量的个数

来源:互联网 发布:linux oracle 进程 编辑:程序博客网 时间:2024/06/05 14:24

题意:求连通分量的个数

分析:直接用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;}