能到达的太平洋和大西洋的区域

417. Pacific Atlantic Water Flow (Medium)

Given the following 5x5 matrix:

  Pacific ~   ~   ~   ~   ~
~ 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 *
* * * * * Atlantic Return:
[[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (positions with parentheses in above matrix).

题目描述:

  左边和上边是太平洋,右边和下边是大西洋,内部的数字代表海拔,海拔高的地方的水能够流到低的地方,求解水能够流到太平洋和大西洋的所有位置。

思路分析:

  从边界出发,左边界和上边界元素都可以流进太平洋,右边界和下边界元素都可以流进大西洋,我们遍历边界元素,然后对边界元素进行深度优先遍历,如果在深度优先遍历的过程中遇到的元素值,大于边界元素,那么证明其可以流入对应的海洋,然后继续对该元素进行深度优先遍历,直到遇见的元素都比其小从而停止遍历。最后我们查看数组中的元素,如果既能到达太平洋又能到达大西洋,那么这个元素就是满足要求得结果,返回其坐标。

代码:

public List<int[]>pacificAtlantic(int[][]matrix){
List<int []>res=new ArrayList<>();
if(matrix==null||matrix.length==0)
return res;
boolean[][]canReachp=new boolean[matrix.length][matrix[0].length]; //记录某个节点是否能到太平洋
boolean[][]canReacha=new boolean[matrix.length][matrix[0].length];//记录某个节点是否能到达大西洋
for(int i=0;i<matrix.length;i++){
dfs(matrix,i,0,canReachp);//从左边界开始深搜看是否元素能到达太平洋
dfs(matrix,i,matrix[0].length-1,canReacha); //从右边界开始深搜看是否元素能到达大西洋
}
for(int j=0;j<matrix[0].length;j++){
dfs(matrix,0,j,canReachp);//从上边界开始深搜看元素是否能到达太平洋
dfs(matrix,matrix.length-1,j,canReacha); //从下边界开始深搜看元素是否能到到达大西洋
}
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix[0].length;j++){
if(canReachp[i][j]&&canReacha[i][j]){//既能到达大西洋又能到达太平洋
res.add(new int[]{i,j});
}
}
}
return res;
}
public void dfs(int[][]matrix,int i,int j,boolean[][]canReach){
if(canReach[i][j]) //避免重复
return;
canReach[i][j]=true;
if(i+1<matrix.length&&matrix[i][j]<=matrix[i+1][j])
dfs(matrix,i+1,j,canReach);
if(i-1>=0&&matrix[i][j]<=matrix[i-1][j])
dfs(matrix,i-1,j,canReach);
if(j+1<matrix[0].length&&matrix[i][j]<=matrix[i][j+1])
dfs(matrix,i,j+1,canReach);
if(j-1>=0&&matrix[i][j]<=matrix[i][j-1])
dfs(matrix,i,j-1,canReach);
}

搜索(DFS)---能到达的太平洋和大西洋的区域的更多相关文章

  1. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  2. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  3. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  4. 【算法入门】深度优先搜索(DFS)

    深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...

  5. 深度优先搜索 DFS 学习笔记

    深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...

  6. 简单搜索dfs, 简单的修剪搜索

    选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...

  7. POJ 2243 简单搜索 (DFS BFS A*)

    题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...

  8. 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof

    题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...

  9. 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty

    题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...

随机推荐

  1. shell处理文件内容

    1.head:输出前N行 2.tail:输出后N行 3.cat:查看文件所有内容 4.wc:统计文件内容相关信息(行数,字符数等) 5.

  2. 2016.5.21【初中部 NOIP提高组】模拟赛A​ 总结

    这次比赛的题目看上去好像不难,但当开始仔细想的时候才发现,并没有那么简单. T1旅行:刚开始看到k<=4的时候还以为有题可以AC了,不过呢,还是毫无思路. T3Pty爬山:雨天的尾巴最近打了几道 ...

  3. LeetCode--102--二叉树的层次遍历(python)

    给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3    / \  9 20  / \ 15 7 ...

  4. div写表格,原生滚动条,数据能够自动滚动

    如何让表格的滚动条能够自动滚动呢? html: <div class="tabinner5"> <div class="tab5 tab5a" ...

  5. SPOJ 694 || 705 Distinct Substrings ( 后缀数组 && 不同子串的个数 )

    题意 : 对于给出的串,输出其不同长度的子串的种类数 分析 : 有一个事实就是每一个子串必定是某一个后缀的前缀,换句话说就是每一个后缀的的每一个前缀都代表着一个子串,那么如何在这么多子串or后缀的前缀 ...

  6. IIS新建项目

    我在写网站的时候要 经常帮公司的游戏写界面,他们用的都是VS,然后要用IIS创建项目(配置环境)然后页面才能够在浏览器上看效果. 那就要先了解啥是IIS: IIS是Internet Informati ...

  7. nvm 管理 node 版本

    nvm 有 Mac 版本 num 亦有 windows 版本(可以搜索 nvm for windows) 安装后 运行 nvm v 可查看版本 运行 nvm install latest 安装最新版本 ...

  8. Windows server 2003+IIS6+PHP5.4.45环境搭建教程

    今天试了一下升级到PHP 5.4.45,但是却发现了不少问题.在以前PHP 5.2.X中,只需要使用php5isapi.dll的方式就可以,但在PHP 5.3以后却不再支持ISAPI模式了,也没有此文 ...

  9. es的索引库模板

    在实际的生产中,如果要插入大批量数据的时候需要使用多个索引库,如果我们还是手工指定每个索引的配置信息settings和mappings,是非常耗时的: 针对这种情况,es有index template ...

  10. flex几种多列布局

    基本的等分三列布局 .container{ display: flex; width: 500px; height: 200px; } .left{ flex:1; background: red; ...