本文主要是介绍UVa572油田(连通块个数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
UVa572 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=513
也就是求联通块个数
运用dfs
#include <cstdio>
#include <cstring>
#define maxn 105char 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;
}
这篇关于UVa572油田(连通块个数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!