LintCode 778 给定一个m×n的非负矩阵代表一个大洲,矩阵的每个单元格的值代表此处的地形高度,矩阵的左边缘和上边缘是“太平洋”,下边缘和右边缘是“大西洋”。

本文主要是介绍LintCode 778 给定一个m×n的非负矩阵代表一个大洲,矩阵的每个单元格的值代表此处的地形高度,矩阵的左边缘和上边缘是“太平洋”,下边缘和右边缘是“大西洋”。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、遍历每个点,每个点来一次dfs,结果超时

class Solution {
public:/*** @param matrix: the given matrix* @return: The list of grid coordinates*/vector<vector<int>> globalans;vector<vector<int>> pacificAtlantic(vector<vector<int>> &matrix) {// write your code hereint row=matrix.size();int col=matrix[0].size();vector<vector<int>> matrixans(row,vector<int>(col));for(int i=0;i<row;i++){for(int j=0;j<col;j++){vector<vector<bool>> visited(row,vector<bool> (col));matrixans[i][j]=dfs(matrix,visited,matrixans,i,j);cout<< matrixans[i][j]<<" ";if(matrixans[i][j]==3){vector<int> temp;temp.push_back(i);temp.push_back(j);globalans.push_back(temp);}}cout<<endl;}return globalans;}int dfs(vector<vector<int>> &matrix,vector<vector<bool>> &visited,vector<vector<int>> &matrixans,int x,int y){int row=matrix.size();int col=matrix[0].size();int ans=0;visited[x][y]=true;if((x==0&&y==col-1)||(x==row-1&&y==0)){ans=3;return ans;}else if(x==0||y==0){ans=1;}else if(x==row-1||y==col-1){ans=2;}vector<vector<int>> move={{0,1},{1,0},{0,-1},{-1,0}};for(int i=0;i<4;i++){int pos_x=x+move[i][0];int pos_y=y+move[i][1];if(pos_x>=0&&pos_x<row&&pos_y>=0&&pos_y<col&&visited[pos_x][pos_y]==false&&matrix[x][y]>=matrix[pos_x][pos_y]){int temp;if(matrixans[pos_x][pos_y]!=0) temp=matrixans[pos_x][pos_y];else temp=dfs(matrix,visited,matrixans,pos_x,pos_y);if(ans==0) ans=temp;else if(temp!=0&&ans!=temp) ans=3; }}return ans;}
};

二、从边缘进行dfs,判断哪些点可达

class Solution {
public:/*** @param matrix: the given matrix* @return: The list of grid coordinates*/vector<vector<int>> globalans;int row;int col;vector<vector<int>> move={{0,1},{1,0},{-1,0},{0,-1}};vector<vector<int>> pacificAtlantic(vector<vector<int>> &matrix) {// write your code hererow=matrix.size();col=matrix[0].size();vector<vector<bool>> Pacific(row,vector<bool>(col));vector<vector<bool>> Atlantic(row,vector<bool>(col));for(int i=0;i<row;i++){dfs(matrix,Pacific,0,i,0);dfs(matrix,Atlantic,0,i,col-1);}for(int i=0;i<col;i++){dfs(matrix,Pacific,0,0,i);dfs(matrix,Atlantic,0,row-1,i);}for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(Pacific[i][j]&&Atlantic[i][j]){vector<int> temp;temp.push_back(i);temp.push_back(j);globalans.push_back(temp);}}}return globalans;}void dfs(vector<vector<int>> &matrix,vector<vector<bool>> &visited,int height,int x,int y){if(x<0||x>=row||y<0||y>=col||matrix[x][y]<height||visited[x][y]){return;}visited[x][y]=true;for(int i=0;i<4;i++){dfs(matrix,visited,matrix[x][y],x+move[i][0],y+move[i][1]);}}};

 

这篇关于LintCode 778 给定一个m×n的非负矩阵代表一个大洲,矩阵的每个单元格的值代表此处的地形高度,矩阵的左边缘和上边缘是“太平洋”,下边缘和右边缘是“大西洋”。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1095214

相关文章

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

Python实现获取带合并单元格的表格数据

《Python实现获取带合并单元格的表格数据》由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,所以本文我们就来聊聊如何使用Python实现获取带合并单元格的表格数据吧... 由于在日常运维中经常出现一些合并单元格的表格,如果要获取数据比较麻烦,现将将封装成类,并通过调用list_exc

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

vue基于ElementUI动态设置表格高度的3种方法

《vue基于ElementUI动态设置表格高度的3种方法》ElementUI+vue动态设置表格高度的几种方法,抛砖引玉,还有其它方法动态设置表格高度,大家可以开动脑筋... 方法一、css + js的形式这个方法需要在表格外层设置一个div,原理是将表格的高度设置成外层div的高度,所以外层的div需要

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

hdu 6198 dfs枚举找规律+矩阵乘法

number number number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Description We define a sequence  F : ⋅   F0=0,F1=1 ; ⋅   Fn=Fn