LeetCode 417. 太平洋大西洋水流问题(BFS/DFS)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 BFS 广度优先搜索
      • 2.2 DFS 深度优先搜索

1. 题目

给定一个 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]] (上图中带括号的单元).

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/pacific-atlantic-water-flow
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 逆向考虑,从两个大洋,往高处或等高的地方流
  • 留到2次的地方为答案

2.1 BFS 广度优先搜索

class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};
public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& matrix) {if(matrix.empty() || matrix[0].empty())return {};int m = matrix.size(), n = matrix[0].size(), i, j, x, y, k, v;vector<vector<bool>> visited(m, vector<bool>(n,false));queue<vector<int>> q;for(i = 0; i < n; ++i)//加入太平洋的两条边{q.push({0,i});visited[0][i] = true;}for(i = 1; i < m; ++i)//加入太平洋的两条边{q.push({i,0});visited[i][0] = true;}while(!q.empty()){x = q.front()[0];y = q.front()[1];v = matrix[x][y];q.pop();for(k = 0; k < 4; ++k){i = x + dir[k][0];j = y + dir[k][1];if(i>=0 && i<m && j>=0 && j<n && !visited[i][j] && v <= matrix[i][j]){q.push({i,j});visited[i][j] = true;}}}vector<vector<bool>> visited2(m, vector<bool>(n,false));for(i = 0; i < n; ++i)//加入大西洋的两条边{q.push({m-1,i});visited2[m-1][i] = true;}for(i = 0; i < m-1; ++i)//加入大西洋的两条边{q.push({i,n-1});visited2[i][n-1] = true;}while(!q.empty()){x = q.front()[0];y = q.front()[1];v = matrix[x][y];q.pop();for(k = 0; k < 4; ++k){i = x + dir[k][0];j = y + dir[k][1];if(i>=0 && i<m && j>=0 && j<n && !visited2[i][j] && v <= matrix[i][j]){q.push({i,j});visited2[i][j] = true;}}}vector<vector<int>> ans;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(visited[i][j] && visited2[i][j])//访问过两次的ans.push_back({i,j});}}return ans;}
};

112 ms 18.7 MB

2.2 DFS 深度优先搜索

class Solution {vector<vector<int>> dir = {{1,0},{0,1},{0,-1},{-1,0}};int m, n;
public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& matrix) {if(matrix.empty() || matrix[0].empty())return {};m = matrix.size(), n = matrix[0].size();int i, j;vector<vector<bool>> visited(m, vector<bool>(n,false));for(i = 0; i < n; ++i){if(!visited[0][i]){visited[0][i] = true;dfs(0,i,visited,matrix);}}for(i = 1; i < m; ++i){if(!visited[i][0]){visited[i][0] = true;dfs(i,0,visited,matrix);}}vector<vector<bool>> visited2(m, vector<bool>(n,false));for(i = 0; i < n; ++i){if(!visited2[m-1][i]){visited2[m-1][i] = true;dfs(m-1,i,visited2,matrix);}}for(i = 0; i < m-1; ++i){if(!visited2[i][n-1]){visited2[i][n-1] = true;dfs(i,n-1,visited2,matrix);}}vector<vector<int>> ans;for(i = 0; i < m; ++i){for(j = 0; j < n; ++j){if(visited[i][j] && visited2[i][j])ans.push_back({i,j});}}return ans;}void dfs(int x, int y, vector<vector<bool>>& visited,vector<vector<int>>& matrix){int i, j, v = matrix[x][y];for(int k = 0; k < 4; ++k){i = x + dir[k][0];j = y + dir[k][1];if(i>=0 && i<m && j>=0 && j<n && !visited[i][j] && v <= matrix[i][j]){visited[i][j] = true;dfs(i, j, visited, matrix);}}	}
};

100 ms 15.4 MB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用jdbc连接各数据库驱动

sql server 2000下的连接串&#xff1a;DRIVER"com.microsoft.jdbc.sqlserver.SQLServerDriver";URL"jdbc:microsoft:sqlserver://localhost:1433;databaseNamessoDemo;usersa;password1"; sql server 2005下的连接串&#xff1a;private static final Str…

安装linux出现基础系统出错,Linux系统出错提示信息详解

ERROR PCI: cannot allocate(无法指派)这样的错误有许多&#xff0c;他们主要在启动系统时出现。他们有一个共同的起因&#xff1a;错误的电源管理行为。罪魁祸首是一个叫做ACPI的东西&#xff0c;即高级配置与电源接口。尽管他是一种电源管理标准&#xff0c;但在十几年的时间…

vCard 格式

最近在做联系人的一些功能&#xff0c;当然是有必要了解一下vCard文件的格式&#xff0c;格式大致如下&#xff1a; vCard 2.1: 1: BEGIN:VCARD 2: VERSION:2.1 3: N:Gump;Forrest 4: FN:Forrest Gump 5: ORG:Bubba Gump Shrimp Co. 6: TITLE:Shrimp Man 7: TEL;WORK;V…

c语言基本数据类型常量,C语言基础学习基本数据类型-变量和常量

变量和常量什么是变量和常量&#xff1f;有些数据在程序运行前就预先设定&#xff0c;并在运行过程中不发生变化&#xff0c;称之为常量&#xff1b;有些数据在程序运行中可能发生变化或被赋值&#xff0c;称之为变量。使用变量前必须先声明一个变量。变量定义的语法是&#xf…

C++ 下一代标准库 tr1中默认的哈希 FNV hash

FNV是 Glenn Fowler&#xff0c; Landon Curt Noll, and Phong Vo 三人的缩写。 FNV-1 哈希算法的核心思想如下: hash offset_basisfor each octet_of_data to be hashed hash hash * FNV_prime hash hash xor octet_of_data return hash实现源码 uint32_t fnv_hash…

LeetCode 416. 分割等和子集(动态规划)

1. 题目 给定一个只包含正整数的非空数组。 是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200 示例 1: 输入: [1, 5, 11, 5] 输出: true 解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 …

c语言格式错误pe,C语言PE文件filebuffer到imagebuffer的错误

// 代码节空白添加.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include int FileBuffers(PVOID* FileBuffer){//传入的FileBufferLPVOID PtempBuffer;FILE* f fopen("C:\\Users\\Administrator\\Desktop\\PET…

2011年影响3G手机发展四大因素

今晨闻讯&#xff0c;中电信明年3季度将推出iPhone。据称CDMA版本的iPhone推出&#xff0c;对中国电信意义重大&#xff0c;售价会高于WCDMA版。联通、移动、电信争夺“苹果血案”将继续上演。 截止2010年12月31日&#xff0c;中国3G用户不超过5000万。而工信部落实3G发展规划是…

c语言字符数组实参 形参,c语言基础(3) 数组和指针作为实参和形参的问题

字符串char a[]"abc";printf("%s",a);fgets(a,100, stdin) //安全的字符串输入函数printf("%s",a);scanf("%*[^\n]"); //两个scanf清空输入缓存scanf("%*c");int 值作为实参 指针作为形参void xchange1(int *n1,int *n2)…

Feature Engineering 特征工程 1. Baseline Model

文章目录1. 读取数据2. 处理label3. 添加特征4. 数据集切片5. 训练6. 预测learn from https://www.kaggle.com/learn/feature-engineering下一篇&#xff1a;Feature Engineering 特征工程 2. Categorical Encodings 1. 读取数据 预测任务&#xff1a;用户是否会下载APP&…

[转载] 湖北:星空团队——海燕计划

2010-7-1 来源&#xff1a;网易科技报道 本文网址&#xff1a;http://tech.163.com/10/0701/16/6AH5MA4S00094II8.html 1.项目及团队名称&#xff1a;星空团队——海燕计划 2.所在的赛区、所在的城市、所属高校&#xff1a;湖北赛区、武汉、华中科技大学 3.所处的公益领域&…

c语言静态存储和动态存储,为了便于计算机存储管理,C语言把保存所有变量的数据区,分成动态存储区和静态存储区,静态局部变量被存放在动态存储区。...

在向旅游者致欢迎词时&#xff0c;便于保存变量部变地陪的态度要热情&#xff0c;感情要真挚&#xff0c;内容要依情而异&#xff0c;语言要( )计算机存据区静山西省总的地势是()。储管成动储区储区存放储区提出到2020年要将我国旅游业建设成国民经济的战略性支柱产业和人民群众…

Feature Engineering 特征工程 2. Categorical Encodings

文章目录1. Count Encoding 计数编码2. Target Encoding 目标编码3. CatBoost Encodinglearn from https://www.kaggle.com/learn/feature-engineering上一篇&#xff1a;Feature Engineering 特征工程 1. Baseline Model 下一篇&#xff1a;Feature Engineering 特征工程 3.…

基于Silverlight+WCF的SAAS开发平台TAP(二)之核心技术

1 核心技术 1.1 元数据 元素据是一个统称&#xff0c;从软件的展现角度来看窗体、页签、字段、从数据存储角度&#xff0c;包括表、列&#xff1b;从逻辑处理角度&#xff0c;包括处理、回调等&#xff0c;在TAP开发平台中会详细讲解各元素的定义与应用。 1.2 函数引擎 函数引擎…

c语言函数能改变指针吗,如何修改传递给C中函数的指针?

如果要这样做&#xff0c;则需要传入指向指针的指针。void barPush(BarList ** list,Bar * bar){if (list NULL) return; // need to pass in the pointer to your pointer to your list.// if there is no move to add, then we are doneif (bar NULL) return;// allocate s…

Feature Engineering 特征工程 3. Feature Generation

文章目录1. 组合特征2. 过去7天的数据3. 上一个相同类型的项目的时间4. 转换数值特征learn from https://www.kaggle.com/learn/feature-engineering上一篇&#xff1a;Feature Engineering 特征工程 2. Categorical Encodings 下一篇&#xff1a;Feature Engineering 特征工程…

C# 转繁体转简体转拼音,超级文本大转换

最近项目中遇到一个需求&#xff1a;把员工的中文姓名根据系统配置转换成中文简体或中文繁体。 原以为需要一个很大的一个简体和繁体相对应的字符对应表之类的东西。 后来发现&#xff0c;VB中就包含了这样的函数Strings.StrConv(this.TextBox1.Text.Trim(), VbStrConv.Traditi…

c语言程序stm8s,经典STM8s20实用C语言编程大全

经典STM8s20实用C语言编程大全我学单片机开门三砖总是要砸的。第一砖&#xff1a;电源系统&#xff0c;这没什么好说的&#xff0c;只是它是stm8工作的基础总是要提一下第二砖&#xff1a;时钟系统&#xff0c;这等下再说。第三砖&#xff1a;复位系统&#xff0c;stm8只需要一…

Feature Engineering 特征工程 4. Feature Selection

文章目录1. Univariate Feature Selection 单变量特征选择2. L1 regularization L1正则learn from https://www.kaggle.com/learn/feature-engineering上一篇&#xff1a;Feature Engineering 特征工程 3. Feature Generation 经过各种编码和特征生成后&#xff0c;通常会拥有…

分销平台使用手册

分销平台使用手册 分销商和供应商流程图 基本资料维护 1、分销联系人资料&#xff1a;包括&#xff1a;联系人&#xff1b;联系固话&#xff08;手机号码&#xff09;&#xff1b;email&#xff1b;阿里旺旺&#xff08;建议用已认证过的账号或商城店铺的阿里旺旺子账号&#x…