给定一个 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 boolean bound(int x,int y,int n,int m){return x>=0&&x<n&&y>=0&&y<m;}public List<List<Integer>> pacificAtlantic(int[][] matrix) {List<List<Integer>> res=new ArrayList<>();if(matrix.length==0) return res;int n=matrix.length,m=matrix[0].length;boolean[][] check=new boolean[n][m];boolean[][] seen=new boolean[n][m];Queue<int[]> queue=new LinkedList<>();int[][] dir=new int[][]{{-1,0},{1,0},{0,1},{0,-1}};for(int i=0;i<m;i++)//将从大西洋出发的入队{queue.add(new int[]{0,i});check[0][i]=true;}for(int i=0;i<n;i++){queue.add(new int[]{i,0});check[i][0]=true;}while (!queue.isEmpty())//bfs搜索从大西洋出发可以到达的地方{int[] temp=queue.poll();int x=temp[0],y=temp[1];for (int[] d:dir){int nextX=x+d[0],nextY=y+d[1];if(bound(nextX,nextY,n,m)&&!check[nextX][nextY]&&matrix[nextX][nextY]>=matrix[x][y])//可以到达的地方{queue.add(new int[]{nextX,nextY});check[nextX][nextY]=true;}}}for(int i=0;i<m;i++)//将从太平洋出发的入队{queue.add(new int[]{n-1,i});seen[n-1][i]=true;}for(int i=0;i<n;i++){if(!seen[i][m-1]){queue.add(new int[]{i,m-1});seen[i][m-1]=true;}}while (!queue.isEmpty())//bfs搜索太平洋出发能到达的点{int[] temp=queue.poll();int x=temp[0],y=temp[1];if(check[x][y]) res.add(new ArrayList(){{add(x);add(y);}});//如果当前节点也能从大西洋出发到达,则是结果for (int[] d:dir){int nextX=x+d[0],nextY=y+d[1];if(bound(nextX,nextY,n,m)&&!seen[nextX][nextY]&&matrix[nextX][nextY]>=matrix[x][y])//可以到达的地方{queue.add(new int[]{nextX,nextY});seen[nextX][nextY]=true;}}}return res;}
}

leetcode417. 太平洋大西洋水流问题(bfs)相关推荐

  1. LeetCode 417. 太平洋大西洋水流问题--BFS

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

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

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

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

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

  4. LC-417. 太平洋大西洋水流问题(多源BFS、DFS)

    417. 太平洋大西洋水流问题 难度中等558 有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻. "太平洋" 处于大陆的左边界和上边界,而 "大西洋&quo ...

  5. ​LeetCode刷题实战417:太平洋大西洋水流问题

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

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

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

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

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

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

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

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

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

最新文章

  1. vue父子组件传值,sync语法糖
  2. 在类模板的声明和定义中把.h与.cpp分离
  3. C语言版回字四种写法的一个例子——数组下标访问
  4. python字符串的删除操作_Python 字符串操作(string替换、删除、截取、复制、连接、比较、...
  5. 决策树ID3、C4.5、CART、随机森林、bagging、boosting、Adaboost、GBDT、xgboost
  6. 基于关系域演算的QBE语言
  7. iOS底层探索之多线程(十六)——锁分析(NSLock、NSCondtion、NSRecursiveLock、NSCondition)
  8. 30天React Native从零到IOS/Android双平台发布总结
  9. R与Python手牵手:多格式文件导入与爬虫
  10. 陆振波的svm的matlab代码的解释,陆振波SVM的MATLAB代码解释
  11. sqlserver常用语法
  12. python打包deb_python开发将项目打包成deb
  13. android压力测试命令monkey详解,android压力测试命令monkey详解
  14. 深度学习第19天_项目1_文本分类的介绍
  15. 求一个乘法算式采用几进制
  16. 会议记录管理系统(5) -浏览会议记录模块设计
  17. tensorflow-gpu版本使用问题和方法汇总
  18. 《大数据可视化》课后习题答案-何光威版
  19. 谈谈引用和Threadlocal的那些事
  20. f烽火ExMobi,移动应用平台的互联网思维

热门文章

  1. Python3正则表达式
  2. String | 263. Ugly Number
  3. 万字总结!java让字符串反转
  4. Anti-Aliasing SSAA MSAA MLAA SRAA 简介
  5. 欧拉路HDU3018
  6. DRUID连接池的简单使用
  7. mac 下终端 操作svn命令 以及出现证书错误的处理方法
  8. IIS6.0的web园--最大工作进程数
  9. IE8无法调试?IE进入不了调试状态
  10. samba登陆密码不正确