Solution 1
非常经典的BFS模版题。
也就根据给定map的四邻域判断有多少个联通分区域。使用BFS在没有搜索过的“1”标记点上开始BFS,并不断标记找过的位置。调用BFS的次数即为岛屿总数。
【备注】查看官方题解,还给出了并查集的思路,也就是通过并查集标记所属团体,并通过不断地find和union将关联集合数量减至最低(但是效率觉得反而变差了)
- 时间复杂度: O ( M N ) O(MN) O(MN),其中 M M M和 N N N分别表示输入map的长和宽。二次搜索遍历,且BFS的过程会保证每一个节点只会被遍历一次
- 空间复杂度: O ( min ( M , N ) ) O(\min(M,N)) O(min(M,N)),其中 M M M和 N N N分别表示输入map的长和宽。BSF搜索占用上界
class Solution {
public:
int numIslands(vector<vector<char>>& grid) {
int ans = 0