uva572 油田 连通块遍历
2016-08-06 11:55
369 查看
代码的简洁性需要注意小技巧:
1. 方向数组。
2. 外面包一层空气防止判断边界。
3. 更改原来的数组的状态而不需要重新建立vis数组
(这样会破坏原始数据,是一个不好的习惯,但是这样很灵活。)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19435
1. 方向数组。
2. 外面包一层空气防止判断边界。
3. 更改原来的数组的状态而不需要重新建立vis数组
(这样会破坏原始数据,是一个不好的习惯,但是这样很灵活。)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19435
#include <stdio.h> #include <memory.h> #define DIRECTSIZE 8 struct direct { int drow; int dcol; } direct[DIRECTSIZE] = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}}; #define MAXN 100 char grid[MAXN+2][MAXN+2]; void dfs(int row, int col) { int i; for(i=0; i<DIRECTSIZE; i++) { int nextrow = row + direct[i].drow; int nextcol = col + direct[i].dcol; if(grid[nextrow][nextcol] == '@') { grid[nextrow][nextcol] = '*'; dfs(nextrow, nextcol); } } } int main(void) { int m, n, count, i, j; while(scanf("%d%d", &m, &n) != EOF) { // 判定结束条件 if(m == 0 && n == 0) break; // 清零:边界清零 memset(grid, 0, sizeof(grid)); // 读入数据 for(i=1; i<=m; i++) scanf("%s", grid[i]+1); // 计数清零 count = 0; // 深度优先搜索 for(i=1; i<=m; i++) for(j=1; j<=n; j++) if(grid[i][j] == '@') { count++; grid[i][j] = '*'; dfs(i, j); } // 输出结果 printf("%d\n", count); } return 0; }
相关文章推荐
- 6_12 油田(UVa572)<图的连通块DFS>
- UVA572油田问题(DFS求连通块)
- 用DFS求连通块(油田Oil Deposits,UVa 572)
- UVa 572 油田(DFS求连通块)
- 例题 6-12 油田 UVa 572 用dfs求连通块
- Uva 572 Oil Deposits 油田 (DFS求连通块)
- 油田UVA 572
- 油田 uva 572
- Uva572-油田
- UVa 572 油田
- UVA 572 油田(BFS)
- UVa 572 - Oil Deposits(油田 dfs) 错的离谱的我
- uva 572 油田
- uva 572 Oil Deposits(油田)—— DFS
- 算法竞赛入门经典 例题 6-12 油田(Oil Deposits, UVa 572)
- 油田(Oil Deposits,UVa 572)
- UVA 572 dfs求连通块
- UVa572油田(连通块个数)
- 油田(UVA572)
- UVa-572油田