Lake Counting(POJ-2386)
2015-09-28 19:09
260 查看
题目链接: http://poj.org/problem?id=2386
题目大意: 计算出相连的'W'有多少块
所需算法: 深度优先搜索(DFS)
主要思路: 从任意的W开始,不停地把邻接的8个点用'.'代替。一次DFS后与一开始的W连接的所有W就被换成了'.',计数加1,继续DFS直到图中无W。
算法复杂度:O(8*N*M) = O(N*M)
代码如下:
题目大意: 计算出相连的'W'有多少块
所需算法: 深度优先搜索(DFS)
主要思路: 从任意的W开始,不停地把邻接的8个点用'.'代替。一次DFS后与一开始的W连接的所有W就被换成了'.',计数加1,继续DFS直到图中无W。
算法复杂度:O(8*N*M) = O(N*M)
代码如下:
#include <cstdio> const int MAX_N = 100, MAX_M = 100; char field[MAX_N][MAX_M+1]; int n, m; void DFS(int x, int y); int main() { int num = 0; scanf("%d %d", &n, &m); for (int i = 0; i < n; i++) scanf("%s", field[i]); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (field[i][j] == 'W') {//从有W的地方DFS DFS(i, j); num++; } printf("%d\n", num); return 0; } void DFS(int x, int y) { //遍历8个方向 for (int dx = -1; dx <= 1; dx++) for (int dy = -1; dy <= 1; dy++) { int nx = x + dx; int ny = y + dy; //判断(nx, ny)是否在园子内且是否有积水 if (nx >= 0 && nx < n && ny >=0 && ny < m && field[nx][ny] == 'W') { field[nx][ny] = '.'; DFS(nx, ny); } } }
相关文章推荐
- UITableView实现类似QQ好友的折叠功能
- C++类及使用 概念及易忽略点小结
- 枚举 到底是不是构造类型???
- 安卓:IntentService实现网络下载图片并写入到SD卡
- 搜索栏的使用(UISearchBar)(跳转到下一个页面,搜索栏消失)
- sql 左联 右联 内联的区别
- ueditor使用
- #1014 : Trie树
- LeetCode----Kth Largest Element in an Array
- 仿StickyListHeaders 实现listview的header滑动效果(类似QQ好友列表)
- 基于FPGA与CY7C68013A的数据采集开发板测试(一)
- 架构之路(三) 单元测试
- 二路归并算法的实现方法,用到vector容器
- 21IC菜农研究的HotWC3超级CRC运算器
- 继承和类目的理解
- JS对select及option的操作详解
- hdu5492(2015合肥网络赛I题)
- cc2540 PM3模式
- SSIS Send Mail
- 自定义菜单栏(UIBarViewController)