每日一題 島嶼數量

2021-10-05 06:14:20 字數 1740 閱讀 8743

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

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

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

示例1:

輸入:11110

11010

11000

00000

輸出: 1

示例2:

輸入:11000

11000

00100

00011

輸出: 3

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

比較典型的連通性問題,可以簡單的使用bfs/dfs/並查集來解決。

方法一:dfs

class

solution

;int addy[4]

=;void

dfs(vectorchar

>>

& grid,

int x,

int y)}}

public

:int

numislands

(vectorchar

>>

& grid)}}

return islandsnum;}}

;

方法二:bfs
class

solution}}

return islandsnum;

}private

:int addx[4]

=;int addy[4]

=;void

bfs(vectorchar

>>

& grid,

int x,

int y));

while

(!q.

empty()

));}

}}}}

;

方法三:並查集
class

unionfind

else

rank.

push_back(0

);}}

}int

find

(int i)

return parent[i];}

void

unite

(int x,

int y)

else

if(rank[rootx]

> rank[rooty]

)else

this

->count--;}

}int

getcount()

private

:int count;

vector<

int> parent;

vector<

int> rank;};

class

solution

if(r +

1< rows && grid[r +1]

[c]==

'1')

if(c -

1>=

0&& grid[r]

[c -1]

=='1')if

(c +

1< cols && grid[r]

[c +1]

=='1')}

}}return uf.

getcount()

;}};

每日一題 島嶼數量

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

每日一題打卡 200 島嶼的數量

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

10 30 每日一題 463 島嶼的周長

給定乙個包含0和1的二維網格地圖,其中1表示陸地0表示水域。網格中的格仔水平和垂直方向相連 對角線方向不相連 整個網格被水完全包圍,但其中恰好有乙個島嶼 或者說,乙個或多個表示陸地的格仔相連組成的島嶼 島嶼中沒有 湖 湖 指水域在島嶼內部且不和島嶼周圍的水相連 格仔是邊長為1的正方形。網格為長方形,...