LeetCod 200 島嶼數量

2021-09-27 08:59:39 字數 1224 閱讀 4559

給定乙個由 '1'(陸地)和 '0'(水)組成的的二維網格,計算島嶼的數量。乙個島被水包圍,並且它是通過水平方向或垂直方向上相鄰的陸地連線而成的。你可以假設網格的四個邊均被水包圍。

示例 1:

輸入:11110

11010

11000

00000

輸出: 1

示例 2:

輸入:11000

11000

00100

00011

輸出: 3

首先要明確一點,即一塊陸地(『1』)也算是乙個島嶼。

(1)本題需要將給定的二維網格,當作乙個無向圖,豎直或者水平相鄰的『1』之間有邊存在。

(2)深度優先搜尋的方法:線性掃瞄整個二維網格,如果某個節點為『1』,則以其為根節點啟動深度優先搜尋。在深度優先搜尋過程中,每個訪問過的節點都變成『0』。計數啟動深度優先搜尋的根節點的數量,即為島嶼的數量。深度優先搜尋使用遞迴的方式實現。

(3)廣度優先的搜尋方法:線性掃瞄整個網格,如果某個節點為『1』,則以其為根節點啟動廣度優先搜尋。在廣度優先搜尋過程中,每個訪問過的節點都變成『0』。計數啟動廣度優先搜尋的根節點的數量,即為島嶼的數量。廣度優先搜尋利用佇列的方式,以迴圈的方式實現。

dfs的方法

void dfs(vector>& grid, int r, int c)

int numislands(vector>& grid) }}

return numisland;

}

bfs方法

int numislands(vector>& grid) 

if(r+1 < nr && grid[r+1][c] == '1')

if(c-1 >= 0 && grid[r][c-1] == '1')

if(c+1 < nc && grid[r][c+1] == '1')}}

}}return numisland;

}

dfs結果

bfs結果

200 島嶼數量

複雜度分析 時間複雜度 o m n 其中 m 和 n 分別為行數和列數。空間複雜度 最壞情況下為 o m n 此時整個網格均為陸地,深度優先搜尋的深度達到m n。class solution int numislands vector grid int cnt 0 for int i 0 i gri...

200 島嶼數量

leetcode 200.島嶼數量 島嶼另一種型別 求周長 leetcoed 463.島嶼的周長 廣度優先遍歷 bfs 深度優先遍歷 dfs 2.1 dfs 就是遇到乙個 1 遞迴下去繼續找 1 四周沒有 1 之後,逐層返回到上一層找四周剩餘的 1 本題不需要回溯 直接把 訪問過的標記即可 廣度優先...

200 島嶼數量

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 grid 1 1 1 1 0 1 1 0 1 0 1 1 0 0 0 0 0 0 0...