日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

岛屿类-网格类问题-DFS | 力扣200. 岛屿数量

發(fā)布時間:2025/3/20 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 岛屿类-网格类问题-DFS | 力扣200. 岛屿数量 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 本文講解200. 島嶼數(shù)量問題,屬于常見的島嶼類-網(wǎng)格類問題
  • 本題使用DFS的思想


1 題目

給你一個由 ‘1’(陸地)和 ‘0’(水)組成的的二維網(wǎng)格,請你計算網(wǎng)格中島嶼的數(shù)量。
島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。
此外,你可以假設(shè)該網(wǎng)格的四條邊均被水包圍。

2 示例

3 思路分析

看見題目就想到使用 DFS 算法,但是使用 DFS我們應(yīng)該留意幾個問題

對比二叉樹的 DFS算法

- 如果 結(jié)點是葉子結(jié)點,返回 - 否則,訪問其左右結(jié)點

放在島嶼問題中,我們把島嶼簡化為一個網(wǎng)格

那么如何在這個網(wǎng)格中進行 DFS 呢

類別二叉樹的 DFS,得出

- 如果是網(wǎng)格之外的結(jié)點,返回 - 否則,訪問其上下左右,四個結(jié)點

這樣,我們就得到了大致框架,

但是還需要注意一個問題就是重復(fù)訪問的問題

否則在網(wǎng)格中很容易出現(xiàn)死循環(huán),

因此,我們可以對訪問過的進行標記,由 1 變成 2,代碼這個島嶼我們已經(jīng)訪問過了~

同時這個題還應(yīng)該留意以下,網(wǎng)格中的是 ‘1’,而不是 1
(我丟,檢查了幾遍~~,一定要細心!)

4 代碼

class Solution { public:int numIslands(vector<vector<char>>& grid) {int res = 0;for (int line = 0; line < grid.size(); line ++)for (int row = 0; row < grid[0].size(); row ++)if (grid[line][row] == '1') {dfslands(grid,line,row);res ++;}return res;}// 判斷是否在二維網(wǎng)絡(luò)中bool in_area(vector<vector<char>>& grid,int line,int row) {return 0 <= line && line < grid.size() && 0 <= row && row < grid[0].size();}void dfslands(vector<vector<char>>& grid,int line,int row) {if (!in_area(grid,line,row)) {return;}if (grid[line][row] != '1') { // 不用 == 0 ,因為后面訪問了的會改為2return;}grid[line][row] = '2' ; // 訪問過這個島嶼dfslands (grid, line - 1,row);dfslands (grid, line + 1,row);dfslands (grid, line,row + 1);dfslands (grid, line,row - 1);} };

懂了 DFS 的套路,可以解決很多類似的網(wǎng)格類問題~

總結(jié)

以上是生活随笔為你收集整理的岛屿类-网格类问题-DFS | 力扣200. 岛屿数量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。