日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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


1 題目

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

2 示例

3 思路分析

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

對比二叉樹的 DFS算法

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

放在島嶼問題中,我們把島嶼簡化為一個網格

那么如何在這個網格中進行 DFS 呢

類別二叉樹的 DFS,得出

- 如果是網格之外的結點,返回 - 否則,訪問其上下左右,四個結點

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

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

否則在網格中很容易出現死循環,

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

同時這個題還應該留意以下,網格中的是 ‘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;}// 判斷是否在二維網絡中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 的套路,可以解決很多類似的網格類問題~

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。