深度优先搜索之水洼的数量
原创 蠕动的二哈 最后发布于2018-10-26 17:33:14 阅读数 379 收藏
展开

  1. 问题描述:

水洼数目有一个大小为N * M的院子,雨后积起了水,
八连通的积水被认为是连在一起的,请求出园子里面总共有多少水洼(八连通指的是下图中相对w大的*部分)

***
*w*
***

限制条件
N, M <=100
样例:
输入
N = 10, M = 12

园子如下图(‘W’表示积水,’.'表示没有积水)

W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

输出

3
//水洼数(DFS)
#include <iostream>
#include <algorithm>
#include <sstream>
#include <cstring>
#include <string>
#include <vector>
using namespace std;int N, M;//N行M列的地图void dfs(char** arr, int i, int j) {arr[i][j] = '.';//遍历过的地方变成干燥//八个方向//if (i > 0 && arr[i - 1][j] == 'W')dfs(arr, i - 1, j);//上方//if (i < N - 1 && arr[i + 1][j] == 'W')dfs(arr, i + 1, j);//下方//if (j > 0 && arr[i][j - 1] == 'W')dfs(arr, i, j - 1);//左方//if (j < M - 1 && arr[i][j + 1] == 'W')dfs(arr, i, j + 1);//右方//if (i > 0 && j > 0 && arr[i - 1][j - 1] == 'W')dfs(arr, i - 1, j - 1);//左上方//if (i > 0 && j < M - 1 && arr[i - 1][j + 1] == 'W')dfs(arr, i - 1, j + 1);//右上方//if (i < N - 1 && j > 0 && arr[i + 1][j - 1] == 'W')dfs(arr, i + 1, j - 1);//左下方//if (i < N - 1 && j < M - 1 && arr[i + 1][j + 1] == 'W')dfs(arr, i + 1, j + 1);//右下方for (int n = -1; n <= 1; n++) {for (int m = -1; m <= 1; m++) {if (n == 0 && m == 0)continue;if (i + n >= 0 && i + n <= N - 1 && j + m >= 0 && j + m <= M - 1) {if (arr[i + n][j + m] == 'W')dfs(arr, i + n, j + m);}}}
}int main() {cin >> N >> M;int count = 0;char** ch_arr = new char*[N];for (int i = 0; i < N; i++){ch_arr[i] = new char[M];cin >> ch_arr[i];}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++){if (ch_arr[i][j] == 'W') {dfs(ch_arr, i, j);count++;}}}cout << count << endl;return 0;
}

算法学习--水洼的数量相关推荐

  1. C语言水洼数算法,C++ 数据结构之水洼的数量算法

    C++ 数据结构之水洼的数量算法 题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被认为是连接在一起的. 请求出园子里总共有多少水洼. 使用深度优先搜索(DFS), 在某一处水洼, 从 ...

  2. 深度优先搜索之水洼的数量

    1. 问题描述: 水洼数目有一个大小为N * M的院子,雨后积起了水, 八连通的积水被认为是连在一起的,请求出园子里面总共有多少水洼(八连通指的是下图中相对w大的*部分) *** *w* *** 限制 ...

  3. C语言水洼数算法,水洼的数量算法 代码(C)

    题目: 有一个大小为N*M的园子, 雨后起了积水. 八连通的积水被认为是连接在一起的. 请求出园子里总共有多少水洼. 使用深度优先搜索(DFS), 在某一处水洼, 从8个方向查找, 直到找到所有连通的 ...

  4. 【C++】DFS——计算土地上水洼的数量

    题目大意:一场大雨后,在一片土地上出现若干水洼,现在把这片土地看成一个mxn的二维方块矩阵,其中有水的方块用'W'表示,陆地用'H'表示.现在由陆地方块或者边界围成的有水方块视为一个水洼(单个有水方块 ...

  5. C语言递归解决水洼问题

    解析: 水洼问题的一个解法就是先找到一个水坑,将它清零,然后遍历它周围将所有水坑清零,直到将这个水洼整体清零,水洼数加一,一直循环直到将所有水洼都清零,其中要注意的一个点就是避免过界. /*水洼问题假 ...

  6. 算法很美:水洼数(dfs)深搜

    题目描述 Descriptions: 由于近日阴雨连天,约翰的农场中中积水汇聚成一个个不同的池塘,农场可以用 N x M (1 <= N <= 100; 1 <= M <= 1 ...

  7. 求水洼的问题——深度优先算法

    解析: 遇到这个题的时候,不太容易快速的想到思路:可能会比较容易想到使用递归的思想: 但是具体怎么写呢? 直接求有几个区域不好求,那么我们换个思路来求,这种题就是这样,直接求不好求,但是当我们转换一下 ...

  8. <<算法很美>>——(七)——DFS典题(一):水洼数目

    目录 问题描述 问题分析 放码过来 问题描述 有一个大小为N×MN×M N\times MN×M的园子,雨后积起了水.八连通的积水被认为是连接在一起的.请求出园子里总共有多少水洼?八连通指的是下图中相 ...

  9. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

最新文章

  1. UE建筑可视化全局照明学习 Unreal Engine: Global Illumination for Arch. Visualization
  2. 2、Power View—风骚的数据自动筛选
  3. System.Web.HttpRequestValidationException——从客户端检测到危险的Request值
  4. 一颗钉子能承受多大的重量?
  5. mysql事务基础+基于innodb的行锁+间隙锁+如何锁定行
  6. BDTC 2017 | 中国大数据技术大会全日程和演讲者曝光
  7. Spring高级之Spring事务详解(用法、传播行为、隔离级别、只读事务、事务条件)
  8. WIN32 串口发送数据
  9. java系列8:一个标准的类
  10. 农村树上的野菜“刺老芽”,价格比肉还贵,这是为啥呢?
  11. python stack使用_python inspect.stack() 的简单使用
  12. 话里话外:谁才是流程的主人
  13. python列表功能默写_python基础学习——列表list的功能
  14. idea 安装 Vue 插件后没有新建Vue文件Vue component选项
  15. (day 47 - 位运算 ) 剑指 Offer 65. 不用加减乘除做加法
  16. 数学分析原理 定理 6.8
  17. HTML点击按钮弹出颜色选择器,css如何实现按钮点击与松开颜色不同?
  18. 【Delphi】如何在三轴加速器的频谱分析中使用FFT(快速傅里叶变换)算法
  19. 【计算机图形学】【实验报告】太阳系绘制、B样条曲线绘制(附代码)
  20. 使用scrapy框架爬取链家网站租房信息

热门文章

  1. Goland 提示 Unresolved reference 错误解决
  2. Apifox验签脚本大众版
  3. iOS开发之iOS15及以上长按输入框点击文本识别,但识别界面不只是键盘区域,而是全屏的,并且会把键盘顶飞的bug解决
  4. 拒绝你访问计算机 无法删除,WinXP系统无法删除文件访问被拒绝怎么办?
  5. 分享自建的 Jrebel License Server 激活 Jrebel
  6. UC HD 1.5:提高在iPad上的阅读体验
  7. 23种设计模式——外观模式
  8. C语言实现TCP服务器与客户端通信
  9. 赢在服务---呼叫中心电话受理与抱怨投诉处理技巧
  10. HOG matlab 代码