程式設計訓練 島嶼數量(C )

2021-10-09 05:50:34 字數 1535 閱讀 3955

**實現

給你乙個由 『1』(陸地)和 『0』(水)組成的的二維網格,請你計算網格中島嶼的數量。

島嶼總是被水包圍,並且每座島嶼只能由水平方向或豎直方向上相鄰的陸地連線形成。

此外,你可以假設該網格的四條邊均被水包圍。

示例 1:

輸入:[

[『1』,『1』,『1』,『1』,『0』],

[『1』,『1』,『0』,『1』,『0』],

[『1』,『1』,『0』,『0』,『0』],

[『0』,『0』,『0』,『0』,『0』]

]輸出: 1

示例 2:

輸入:[

[『1』,『1』,『0』,『0』,『0』],

[『1』,『1』,『0』,『0』,『0』],

[『0』,『0』,『1』,『0』,『0』],

[『0』,『0』,『0』,『1』,『1』]

]輸出: 3

解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連線而成。

掃瞄網格,找到數字為『1』的座標,進行深度優先搜尋,每乙個被搜尋到的1都更改為0,防止重複搜尋,

深度搜尋了多少次,那麼就有多少個島嶼。

掃瞄網格,找到數字為『1』的座標,將其放入佇列,進行廣度優先搜尋,每乙個被搜尋到的1都更改為0,隊列為空的時候結束,廣度搜尋了多少次,那麼就有多少個島嶼。

摘自官網

class

solution

public

:int

numislands

(vectorchar

>>

& grid)}}

return num_islands;}}

;

class

solution);

//入佇列

while

(!neighbors.

empty()

)); grid[row-1]

[col]

='0';}

if(row +

1< nr && grid[row+1]

[col]

=='1'))

; grid[row+1]

[col]

='0';}

if(col -

1>=

0&& grid[row]

[col-1]

=='1'))

; grid[row]

[col-1]

='0';}

if(col +

1< nc && grid[row]

[col+1]

=='1'))

; grid[row]

[col+1]

='0';}

}}}}

return num_islands;}}

;

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...