UVa572 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=513
也就是求联通块个数
运用dfs
#include <cstdio> #include <cstring> #define maxn 105 char map[maxn][maxn]; int vis[maxn][maxn]; int m,n; void dfs(int r,int c,int cur){ if(map[r][c]!='@'||vis[r][c]>0) return ; if(r<0||r>=m||c<0||c>=n) return ; vis[r][c]=cur; for(int dr=-1;dr<=1;dr++){ //判断8个方向 for(int dc=-1;dc<=1;dc++){ if(dr!=0||dc!=0){ dfs(r+dr,c+dc,cur); } } } } int main(){ //freopen("UVa572.txt","r",stdin); while(scanf("%d%d",&m,&n)!=EOF&&m&&n){ for(int i=0;i<m;i++){ scanf("%s",map[i]); } int cur=0; memset(vis,0,sizeof(vis)); for(int i=0;i<m;i++) for(int j =0;j<n;j++){ if(map[i][j]=='@'&&vis[i][j]==0) dfs(i,j,++cur); } printf("%d\n",cur); } return 0; }