力扣第417題測試程序

題目描述:
有一個 m × n 的矩形島嶼,與 太平洋 和 大西洋 相鄰。 “太平洋” 處于大陸的左邊界和上邊界,而 “大西洋” 處于大陸的右邊界和下邊界。
這個島被分割成一個由若干方形單元格組成的網格。給定一個 m x n 的整數矩陣 heights , heights[r][c] 表示坐標 (r, c) 上單元格 高于海平面的高度 。
島上雨水較多,如果相鄰單元格的高度 小于或等于 當前單元格的高度,雨水可以直接向北、南、東、西流向相鄰單元格。水可以從海洋附近的任何單元格流入海洋。
返回網格坐標 result 的 2D 列表 ,其中 result[i] = [ri, ci] 表示雨水從單元格 (ri, ci) 流動 既可流向太平洋也可流向大西洋 。

示例1:
輸入: heights = [[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]]
示例 2:
輸入: heights = [[2,1],[1,2]]
輸出: [[0,0],[0,1],[1,0],[1,1]]

力扣題目鏈接:
https://leetcode.cn/problems/pacific-atlantic-water-flow/

題解思路:深度優先搜索,從邊界處進行搜索,尋找符合條件的單元格,從太平洋邊上的節點 逆流而上,將遍歷過的節點都標記上,從大西洋的邊上節點 逆流而長,將遍歷過的節點也標記上,最后放入都符合條件的數組即可

下面給出ACM模式代碼,包含了核心代碼,可以自行驗證,主要是熟悉下ACM模式

#include <iostream>
#include <vector>
using namespace std;// 核心代碼部分
class Solution {
private:int dir[4][2] = {-1, 0, 0, -1, 1, 0, 0, 1}; // 保存四個方向// 深度優先搜索void dfs(vector<vector<int>>& heights, vector<vector<bool>>& visited, int x, int y) {if (visited[x][y]) return;visited[x][y] = true;for (int i = 0; i < 4; i++) { // 向四個方向遍歷long int nextx = x + dir[i][0];long int nexty = y + dir[i][1];// 超過邊界if (nextx < 0 || nextx >= heights.size() || nexty < 0 || nexty >= heights[0].size()) continue;// 高度不合適,注意這里是從低向高判斷if (heights[x][y] > heights[nextx][nexty]) continue;dfs (heights, visited, nextx, nexty);}return;}public:vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {vector<vector<int>> result;int n = heights.size();int m = heights[0].size();// 記錄從太平洋邊出發,可以遍歷的節點vector<vector<bool>> pacific = vector<vector<bool>>(n, vector<bool>(m, false));// 記錄從大西洋出發,可以遍歷的節點vector<vector<bool>> atlantic = vector<vector<bool>>(n, vector<bool>(m, false));// 從最上最下行的節點出發,向高處遍歷for (int i = 0; i < n; i++) {dfs (heights, pacific, i, 0); // 遍歷最左列,接觸太平洋 dfs (heights, atlantic, i, m - 1); // 遍歷最右列,接觸大西 }// 從最左最右列的節點出發,向高處遍歷for (int j = 0; j < m; j++) {dfs (heights, pacific, 0, j); // 遍歷最上行,接觸太平洋dfs (heights, atlantic, n - 1, j); // 遍歷最下行,接觸大西洋}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {// 如果這個節點,從太平洋和大西洋出發都遍歷過,就是結果if (pacific[i][j] && atlantic[i][j]) result.push_back({i, j});}}return result;}
};int main() {int m, n; // 定義行和列int num; // 輸入的不同數字Solution s;vector<vector<int>> res; // 定義一個二維數組// 輸入數據while (cin >> m >> n) {if (m == 0 && n == 0) break;res.resize(m, vector<int>(n));for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {cin >> num;res[i][j] = num;}}vector<vector<int>> result = s.pacificAtlantic(res);cout << "輸出結果為:" << "[";  for (int i = 0; i < result.size(); i++) {  cout << "[" << result[i][0] << "," << result[i][1] << "]";  }cout << "]" << endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/22980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/22980.shtml
英文地址,請注明出處:http://en.pswp.cn/web/22980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于web的垃圾分類回收系統的設計

管理員賬戶功能包括&#xff1a;系統首頁&#xff0c;個人中心&#xff0c;管理員管理&#xff0c;用戶管理&#xff0c;公告管理&#xff0c;運輸管理&#xff0c;基礎數據管理 用戶賬戶功能包括&#xff1a;系統首頁&#xff0c;個人中心&#xff0c;運輸管理&#xff0c;公告…

pyqt QlineEdit內部增加按鈕方法

pyqt QlineEdit內部增加按鈕方法 def addButton(self,lineEdit):btn QtWidgets.QPushButton("")icon1 QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap(":/image/images/th.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)btn.setIcon(icon1)btn.setStyleShe…

全光譜led燈的危害有哪些?曝光低質量全光譜led燈產生的四大風險

眼睛是人類獲取信息最重要的感官器官之一&#xff0c;而近視則會導致視力模糊&#xff0c;進而影響學習效果和生活品質。因此&#xff0c;如何保護眼睛&#xff0c;尤其是在學習和使用電子設備時&#xff0c;成為了一個迫切需要解決的問題。然而在護眼領域上&#xff0c;護眼臺…

【DevOps】網絡安全進階之路:打造更安全、更可靠的網站

目錄 一、網站面臨的主要安全威脅 1、SQL注入攻擊 2、跨站腳本攻擊(XSS) 3、跨站請求偽造(CSRF) 4、文件上傳漏洞 5、不安全的直接對象引用 6、安全配置錯誤 7、使用含有已知漏洞的組件 二、網站安全防護措施 1、輸入驗證與過濾 2、使用參數化查詢 3、數據輸出編碼…

SCAU 數據結構 實驗六 排序算法

![[Pasted image 20240 8638 直接插入排序 Description 用函數實現直接插入排序&#xff0c;并輸出每趟排序的結果. 輸入格式 第一行&#xff1a;鍵盤輸入待排序關鍵的個數n 第二行&#xff1a;輸入n個待排序關鍵字&#xff0c;用空格分隔數據 輸出格式 每行輸出一趟排序…

掌握Java設計模式的23種武器(全):深入解析與實戰示例

目錄 一、創建型模式 1. 單例模式 (Singleton Pattern) 2. 工廠模式 (Factory Pattern) 3. 抽象工廠模式 (Abstract Factory Pattern) 4. 建造者模式 (Builder Pattern) 5. 原型模式 (Prototype Pattern) 二、結構型模式 6. 適配器模式 (Adapter Pattern) 7. 橋接模式…

通信的本質是什么

通信的本質是信息的傳遞和交換。在通信過程中&#xff0c;信息從一個主體&#xff08;發送方&#xff09;傳遞到另一個主體&#xff08;接收方&#xff09;&#xff0c;目的是使接收方理解或使用發送方傳遞的信息。無論使用什么樣的媒介或技術&#xff0c;通信的核心都是在不同…

十三、resultMap解析

分為兩部分&#xff1a;解析和使用 解析 1.解析XML的時候單獨解析所有的resultMap標簽&#xff0c;封裝成ResultMap對象存入configuration中 2.解析XML中的SQL語句&#xff0c;封裝MappedStatement對象&#xff0c;這里會根據SQL的返回類型是resultMap還是resultType做處理。如…

C語言 | Leetcode C語言題解之第133題克隆圖

題目&#xff1a; 題解&#xff1a; struct Node** visited; int* state; //數組存放結點狀態 0&#xff1a;結點未創建 1&#xff1a;僅創建結點 2&#xff1a;結點已創建并已填入所有內容void bfs(struct Node* s) {if (visited[s->val] && state[s->val] 2…

【嵌入式系統實踐】實驗三EXTI按鈕外部中斷控制LED燈參考代碼

此內容不屬于實驗內容&#xff0c;因自己手頭有一STM32F103&#xff0c;故驗證性的進行代碼實驗&#xff0c;按照老師課堂ppt進行了一下復現。 通過按鈕控制LED燈的亮滅(狀態取反)。 main.c代碼&#xff1a; #include "STM32F10X.h" #include "stdio.h"…

Open3D Guided濾波(Python版本)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 Guided Filter原本主要用于2D圖像的降噪等處理,但經過適當的修改后,它可以有效地應用于3D點云的降噪。這種方法能夠保留點云中的細節信息,并且對邊緣和曲面進行保護。 其具體計算過程如下所述: 1.局部線性假設:…

Python Lambda函數的應用實例教程

在Python編程中&#xff0c;lambda函數是一種簡潔且強大的工具&#xff0c;用于創建小型匿名函數。它們在需要快速定義簡單函數時特別有用。本文將詳細介紹lambda函數的語法及其多種應用實例&#xff0c;幫助讀者更好地理解和使用lambda函數。 一、lambda函數的基本概念 1.1 什…

c++(內存分配,構造,析構)

#include <iostream>using namespace std; class Per { private:string name;int age;double *height;double *weigh; public://無參構造Per(){cout << "Per::無參構造" << endl;}//有參構造Per(string name,int age,double height,double weigh):…

Nginx 的 stream 模塊,配置轉發redis和mysql

Nginx 的 stream 模塊確實可以配置多個 upstream 塊&#xff0c;用于定義多個后端服務器組。然而&#xff0c;需要注意的是&#xff0c;每個 upstream 塊通常用于一種特定類型的服務&#xff0c;例如定義一組TCP服務器&#xff0c;可以是Redis服務器、MySQL服務器或其他任何TCP…

【TB作品】 51單片機8x8點陣顯示滾動漢字仿真

功能 題目5基于51單片機LED8x8點陣顯示 流水燈 直接滾動顯示HELLO 直接滾動顯示老師好 代碼 void main( void ) {/** 移位后&#xff0c;右邊的是第一個595&#xff0c;接收0X02&#xff0c;顯示出0X02* 移位后&#xff0c;左邊的是第2個595&#xff0c;接收0Xfe&#xff0c…

創建常規DLL的動態鏈接庫

本文僅供學習交流&#xff0c;嚴禁用于商業用途&#xff0c;如本文涉及侵權請及時聯系本人將于及時刪除 【例9.3】創建一個MFC 常規DLL的動態鏈接庫Areadll&#xff0c;在該動態鏈接庫中添加一個導出類CArea&#xff0c;通過該類獲取正方形和圓的面積。 (1) 使用“MFC動態鏈接…

HttpClient Overview(翻譯)

HttpClient Overview **原文鏈接&#xff1a;HttpClient Overview The Hyper-Text Transfer Protocol(HTTP) is perhaps the most significant protocol used on the Internet today.Web services,network-enabled appliances and the growth on of network computing contin…

Allegro器件角度傾斜如何回正?

Allegro器件角度傾斜,坐標含有小數點調整為45度整數倍的方法 Allegro器件角度傾斜回正的方法。 在用Allero進行PCB設計過程中,有時候由于誤操作;或者剛開始器件需要非45度整數倍的角度,后又需要調整為整數倍的角度。器件角度傾斜含有小數點調整為45度整數倍的方法。 1、如…

Python Word變量:深入探索與實際應用

Python Word變量&#xff1a;深入探索與實際應用 在Python編程中&#xff0c;處理文本數據是一項至關重要的任務。而Word變量&#xff0c;作為存儲和操作文本數據的核心元素&#xff0c;其使用和技巧對于提升編程效率和準確性具有不可忽視的作用。本文將從四個方面、五個方面、…

Arduino網頁服務器:如何將Arduino開發板用作Web服務器

大家好&#xff0c;我是咕嚕鐵蛋&#xff01;今天&#xff0c;我將和大家分享一個有趣且實用的項目——如何使用Arduino開發板搭建一個簡易的網頁服務器。通過這個項目&#xff0c;你可以將Arduino連接到互聯網&#xff0c;并通過網頁控制或查詢Arduino的狀態。 一、項目背景與…