码迷,mamicode.com
首页 > 其他好文 > 详细

UVa572 Oil Deposits (DFS求连通块)

时间:2016-09-01 18:00:59      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

链接:http://acm.hust.edu.cn/vjudge/problem/19435
分析:DFS求图的连通块。每次从图中找出一个未访问过的‘@’开始递归遍历它周围的‘@’格子,将访问到的‘@’标上id存在idx数组中,dfs的次数就是连通块的个数。
DFS遍历用递归实现,BFS用队列实现。
DFS和BFS实现种子填充:https://zh.wikipedia.org/wiki/Flood_fill

 1 #include <cstdio>
 2 #include <cstring>
 3 
 4 const int maxn = 100 + 5;
 5 
 6 int m, n, idx[maxn][maxn];
 7 char pic[maxn][maxn];
 8 
 9 void dfs(int r, int c, int id) {
10     if (r < 0 || r >= m || c < 0 || c >= n) return;
11     if (idx[r][c] || pic[r][c] != @) return;
12     idx[r][c] = id;
13     for (int dr = -1; dr <= 1; dr++)
14         for (int dc = -1; dc <= 1; dc++)
15              if (dr != 0 || dc != 0) dfs(r + dr, c + dc, id);
16 }
17 
18 int main() {
19     while (scanf("%d%d", &m, &n) == 2 && m && n) {
20         for (int i = 0; i < m; i++) scanf("%s", pic[i]);
21         memset(idx, 0, sizeof(idx));
22         int cnt = 0;
23         for (int i = 0; i < m; i++)
24             for (int j = 0; j < n; j++)
25                 if (idx[i][j] == 0 && pic[i][j] == @) dfs(i, j, ++cnt);
26         printf("%d\n", cnt);
27     }
28     return 0;
29 }

 

UVa572 Oil Deposits (DFS求连通块)

标签:

原文地址:http://www.cnblogs.com/XieWeida/p/5830603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!