(M)DFS:417. Pacific Atlantic Water Flow
来源:互联网 发布:知乎 暗网体验 编辑:程序博客网 时间:2024/05/22 20:59
这是一个搜索问题。
如果就按照从左上到右下的扫描顺序,那么会有很多很多重复计算,所以这道题采用从边缘开始搜索的方法。分别从边缘开始向内部dfs。
从边缘当作起点开始遍历搜索,然后标记能到达的点位true,分别标记出pacific和atlantic能到达的点,那么最终能返回的点就是二者均为true的点。
class Solution {public: vector<pair<int, int>> pacificAtlantic(vector<vector<int>>& matrix) { if (matrix.empty() || matrix[0].empty()) return {}; vector<pair<int, int>> res; int m = matrix.size(), n = matrix[0].size(); vector<vector<bool>> pacific(m, vector<bool>(n, false)); vector<vector<bool>> atlantic(m, vector<bool>(n, false)); for (int i = 0; i < m; ++i) { dfs(matrix, pacific, INT_MIN, i, 0); dfs(matrix, atlantic, INT_MIN, i, n - 1); } for (int i = 0; i < n; ++i) { dfs(matrix, pacific, INT_MIN, 0, i); dfs(matrix, atlantic, INT_MIN, m - 1, i); } for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (pacific[i][j] && atlantic[i][j]) { res.push_back({i, j}); } } } return res; } void dfs(vector<vector<int>>& matrix, vector<vector<bool>>& visited, int pre, int i, int j) { int m = matrix.size(), n = matrix[0].size(); if (i < 0 || i >= m || j < 0 || j >= n || visited[i][j] || matrix[i][j] < pre) return; visited[i][j] = true; dfs(matrix, visited, matrix[i][j], i + 1, j); dfs(matrix, visited, matrix[i][j], i - 1, j); dfs(matrix, visited, matrix[i][j], i, j + 1); dfs(matrix, visited, matrix[i][j], i, j - 1); }};
阅读全文
0 0
- (M)DFS:417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow dfs
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- 417. Pacific Atlantic Water Flow
- leetcode---Pacific Atlantic Water Flow---dfs
- Pacific Atlantic Water Flow
- LeetCode—417. Pacific Atlantic Water Flow
- Leetcode-417. Pacific Atlantic Water Flow
- LeetCode 417. Pacific Atlantic Water Flow 题解
- Frequent values-------最多的连续的个数
- C++template模板
- UVA得分
- 留作笔记,原文链接:https://www.2cto.com/kf/201607/529682.html
- 影音图教程网站
- (M)DFS:417. Pacific Atlantic Water Flow
- unix网络编程第三版环境配置
- 基于用户投票的排名算法(六):贝叶斯平均
- 渲染管线流程
- leetcode之数组类之数组的旋转与分治类-----OJ 189/33/81/153/154 数组旋转 旋转数组搜索 88 有序数组合并 4 两个有序数组寻找第K个元素/中位数 35 寻找插入位置
- linux
- 名称:二叉树及其基本操作
- TCP分片/IP分片区别
- Jdbcutil.java jdbc.properties