搜索(DFS)---能到达的太平洋和大西洋的区域
能到达的太平洋和大西洋的区域
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)---能到达的太平洋和大西洋的区域的更多相关文章
- 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)
深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...
- 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)
需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...
- 深度优先搜索DFS和广度优先搜索BFS简单解析
转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...
- 【算法入门】深度优先搜索(DFS)
深度优先搜索(DFS) [算法入门] 1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解 ...
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
- 简单搜索dfs, 简单的修剪搜索
选择最合适的语言做一个项目是非常重要的.但,熟练的掌握自己的武器,这也是非常重要的. ========================================================= ...
- POJ 2243 简单搜索 (DFS BFS A*)
题目大意:国际象棋给你一个起点和一个终点,按骑士的走法,从起点到终点的最少移动多少次. 求最少明显用bfs,下面给出三种搜索算法程序: // BFS #include<cstdio> #i ...
- 记忆化搜索(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]) + ...
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
题目传送门 /* 题意:给了两堆牌,每次从首部取出一张牌,按颜色分配到两个新堆,分配过程两新堆的总数差不大于1 记忆化搜索(DFS+DP):我们思考如果我们将连续的两个操作看成一个集体操作,那么这个操 ...
随机推荐
- ESP8266的使用学习
ESP8266-01 ESP8266-12F简介 让灯闪烁 ESP8266-中断 模拟输入(ADC-A0) 模拟输出(PWM) 串口通信(Serial) EEPROM类库的使用 ...
- python-hasattr()、getattr()、setattr()函数的使用
python中hasattr().getattr().setattr()函数 class A(): name = 'python' def __init__(self): setattr(self._ ...
- R语言预测实战(第二章--预测方法论)
2.1预测流程 从确定预测主题开始,一次进行数据收集.选择方法.分析规律.建立模型.评估效果直到发布模型. 2.2.1确定主题 (1)指标:表达的是数量特征,预测的结果也通常是通过指标的取值来体现. ...
- 清北学堂算法&&数据结构DAY1——知识整理
简述: 今天主要讲分治(主要是二分).倍增.贪心.搜索,还乱入了爬山算法和模拟退火(汗...) 一.分(er)治(fen): 二分是个在OI中广泛运用的思想,随便举些例子,就足以发现二分的运用的广泛性 ...
- 洛谷P1310 表达式的值——题解
题目传送 题的难点:1.有运算优先级,不好判断.2.有破坏整体和谐性的讨厌的括号.3.不知道哪里要填数.4.要求方案数很大,搜索不会做呐. 发现难点1和2都是中缀表达式的缺点.转成后缀表达式后难点1. ...
- ubuntu18.04设置静态IP
ubuntu18与ubuntu14.16设置静态ip地方方法不同,很多人没去读更新文档的时候往往会设置静态ip地址不成功,下面是具体的设置方法 做之前一定要确认自己操作系统的版本,每个版本设置的方法有 ...
- CDQ求子矩阵的和
Description维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=160000,询问数Q<=10000,W<=20000 ...
- SpringMVC开发中遇到的异常1:No primary or default constructor found for interface java.util.List
Request processing failed; nested exception is java.lang.IllegalStateException: No primary or defaul ...
- jni中arm64-v8a,armeabi-v7a,armeabi文件夹的意义和用法<转>
jni中arm64-v8a,armeabi-v7a,armeabi文件夹的意义和用法 起因 之前并没有关注这块,直到:您的应用被拒绝,原因:xplay5sQ心里点击笑值点击拍照显示停止运行,查看发过来 ...
- java操作solr
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</a ...