题意:求连通分量的个数
分析:直接用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; }