力扣 200 島嶼的數量

2022-04-09 13:46:42 字數 1289 閱讀 1558

傳送門

題目分析:

對於只含有0和1的二維網路,題目實際上問的是二維網路中連通著的'1'的塊數(這裡的連通只能是上下左右連通)。那麼,我們可以遍歷二維網路,對於陸地(由'1'構成),搜尋與其向連的'1'(陸地),$numisland$加一,當搜尋完一塊兒陸地(連著的'1')後,一定將他們變為'0',避免重複。

基於上述思想,做法有很多,比如搜尋時用$bfs$和$dfs$均可,只不過$dfs$用遞迴實現,而$bfs$用佇列實現。除此之外,也可以考慮用並查集實現相關連通塊兒的合併,最後統計根節點的數目就行了。

方法一、深度優先搜尋$dfs$

class

solution }}

return

num_island;

}void dfs(vectorchar>>& grid, int x, int

y) , dy[4] = ;

grid[x][y] = '

0'; //

避免重複遍歷

//深度優先搜尋(迭代)

for(int i = 0; i < 4; i++)

}};

方法二、廣度優先搜尋$bfs$

#include using

namespace

std;

int dx[4] = ;

int dy[4] = ;

class

solution );

while(!neighbors.empty()) );

grid[xx][yy] = '0'

; }}

}}}}

}return

num_island;

}};

方法三、並查集

#include using

namespace

std;

int dx[4] = ;

int dy[4] = ;

int par[100005

];int rak[100005

];class

solution

}int find(int x)

void unite(int x, int

y) }

int numislands(vectorchar>>&grid) }}

}for(int i = 0; i < row; i++)

}return

num_island;

}};

力扣 200 島嶼數量

給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。解題思路 dfs函式的作用 找到包含grid i j 格仔的島嶼的全部格仔,並將其全部置為 2 已訪...

力扣 200 島嶼數量(js)

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

力扣Leetcode 200 島嶼數量

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