給你乙個由 『1』(陸地)和 『0』(水)組成的的二維網格,請你計算網格中島嶼的數量。比較典型的連通性問題,可以簡單的使用bfs/dfs/並查集來解決。島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
示例1:
輸入:11110
11010
11000
00000
輸出: 1
示例2:
輸入:11000
11000
00100
00011
輸出: 3
解釋: 每座島嶼只能由水平和/或豎直方向上相鄰的陸地連線而成。
方法一:dfs
class
solution
;int addy[4]
=;void
dfs(vectorchar
>>
& grid,
int x,
int y)}}
public
:int
numislands
(vectorchar
>>
& grid)}}
return islandsnum;}}
;
方法二:bfsclass
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的正方形。網格為長方形,...