给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度。“太平洋”处于大陆的左边界和上边界,而“大西洋”处于大陆的右边界和下边界。
规定水流只能按照上、下、左、右四个方向流动,且只能从高到低或者在同等高度上流动。
请找出那些水流既可以流动到“太平洋”,又能流动到“大西洋”的陆地单元的坐标。

提示:
输出坐标的顺序不重要
m 和 n 都小于150

示例:
给定下面的 5x5 矩阵:
太平洋 ~ ~ ~ ~ ~
~ 1 2 2 3 (5) *
~ 3 2 3 (4) (4) *
~ 2 4 (5) 3 1 *
~ (6) (7) 1 4 5 *
~ (5) 1 1 2 4 *
* * * * * 大西洋
返回:
[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (上图中带括号的单元).

思路:
使用搜索算法,建立两个与原矩阵相同大小的矩阵,分别记录能否到达太平洋和大西洋,然后分别从两个边界开始搜索,搜索周围的更大值,若搜索到则将其标记并继续搜索,若其已经被标记则直接返回,最后分别对比两个矩阵,若相同位置均被标记,则将其输出。

代码:

class Solution {public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {int m=heights.size();
int n=heights[0].size();
vector<vector<bool>> w(m, vector<bool>(n, false));
vector<vector<bool>> e(m, vector<bool>(n, false));
for(int i=0;i<m;i++)
{dfs(heights,e,i,0);dfs(heights,w,i,n-1);
}
for(int i=0;i<n;i++)
{dfs(heights,e,0,i);dfs(heights,w,m-1,i);
}
vector<vector<int>> ans;
for (int i=0;i<m;i++)
{for (int j=0;j<n;j++)
{if(w[i][j]&&e[i][j])
{ans.push_back(vector<int>{i, j});
}
}
}
return ans;}void dfs(vector<vector<int>>& h, vector<vector<bool>>& f,int p, int q){vector<int> direction{-1, 0, 1, 0, -1};if(f[p][q]) return;else{f[p][q]=true;int x,y;for (int i=0;i<4;i++) {x=p+direction[i];y=q+direction[i+1];if(x>=0&&x<h.size()&&y>=0&&y<h[0].size()&&h[p][q]<=h[x][y]) {dfs(h,f,x,y);} }}}
};

leetcode417 太平洋大西洋水流问题相关推荐

  1. leetcode417. 太平洋大西洋水流问题(bfs)

    给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的右边界和下边界.规定水流只能按照 ...

  2. [leetcode417]. 太平洋大西洋水流问题

    回溯法: 方法:从太平洋和大西洋分别往中间进行搜索(下一个节点的满足条件是比该节点的值大),使用两个数组分别记录每一个点是否可以流向的大西洋和是否可以流向太平洋,最后在对两个数组进行遍历,找到既能够去 ...

  3. 利用DFS解决太平洋大西洋水流问题

    二十五.太平洋大西洋水流问题 25.1.题设要求   有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋& ...

  4. Java实现 LeetCode 417 太平洋大西洋水流问题

    417. 太平洋大西洋水流问题 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的 ...

  5. 力扣417题太平洋大西洋水流问题

    力扣417题太平洋大西洋水流问题 题目描述:有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋" ...

  6. LeetCode 417.太平洋大西洋水流问题

    LeetCode 417.太平洋大西洋水流问题 有一个 m × n 的长方形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋&qu ...

  7. Leetcode 417 题 太平洋大西洋水流问题

    题目描述 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处于大陆的右边界和下边界. 规定 ...

  8. 417. 太平洋大西洋水流问题(DFS)

    417. 太平洋大西洋水流问题 题目 解题思路 代码 题目 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而" ...

  9. 417. 太平洋大西洋水流问题(medium) -力扣(leetCode)逆流而上,JS图的深度优先遍历算法

    ⚡️417. 太平洋大西洋水流问题⚡️ 给定一个 m x n 的非负整数矩阵来表示一片大陆上各个单元格的高度."太平洋"处于大陆的左边界和上边界,而"大西洋"处 ...

最新文章

  1. QEMU 中音频模拟如何工作
  2. 慕课php进阶篇,PHP进阶篇-函数
  3. mysql 学习笔记10 常用数学函数
  4. SimpleDateFormat(线程不安全)与DateTimeFormatter(线程安全)
  5. react更改路由入参_react路由传参方式
  6. import package怎么用
  7. 计算机英语板卡,数据采集卡
  8. hadoop2.xHA机制的实现原理
  9. 【渝粤题库】陕西师范大学200091 东方文学专题研究 作业
  10. 2016 工作、生活与得失
  11. linux之mail命令发邮件
  12. RHCE考试题及讲解(一)
  13. python模拟app发送请求失败_如何使用Tensorflow解决Python Chatbot App的运行会话失败问题...
  14. OpenGL之纹理过滤(Texture Filtering)、MipMap方法、纹理坐标
  15. 卷积神经网络结构示意图,卷积神经网络的结构图
  16. odoo开发:关于打印repair模块PDF报表,默认纸张头部有一大块空白无法修改的问题解决方案
  17. AEJoy —— 表达式之闪烁光标的打字机效果(二)【JS】
  18. const指针的一些总结
  19. label 中的for属性有什么用
  20. RSA算法以及所涉及的数论定理的简单证明

热门文章

  1. IC公司认可的数字IC_FPGA设计课程
  2. 数据结构与算法之数组: Leetcode 914. 卡牌分组 (Typescript版)
  3. Python读书笔记第五章:运算符与表达式
  4. Android input 系统InputReader,InputDispatcher线程实例--UI死掉
  5. SNN学习笔记-静息电位和平衡电位的理解
  6. android 经纬度 百度地图,05-04【咨询】安卓开发百度地图输入地址,将得到的经纬度存储...
  7. 【C语言】例3.5 求方程的根
  8. Git——分支(详细解释)
  9. (转)tomcat与地址栏图标之研究(多浏览器)
  10. Windows运行.sh文件方法