給定乙個包含了一些 0 和 1的非空二維陣列 grid , 乙個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。求網格中最大的連通區域的面積,最直觀的思路就是使用bfs或者dfs搜尋出每乙個連通區域的面積。找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為0。)
例項1:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]
對於上面這個給定矩陣應返回 6。注意答案不應該是11,因為島嶼只能包含水平或垂直的四個方向的『1』。
例項2:
[[0,0,0,0,0,0,0,0]]
對於上面這個給定的矩陣, 返回 0。
注意: 給定的矩陣grid 的長度和寬度都不超過 50。
演算法如下:遍歷整個地圖,遇到 == 1的結點就開始深搜或者廣搜,為了避免結點的重複搜尋,將搜尋過的位置的值置為0。
class
solution}}
return maxarea;
}int
dfs(vectorint>>
& grid,
int x,
int y)
;int addy[4]
=;int area =0;
grid[x]
[y]=0;
for(
int i =
0; i <
4; i++
)return
1+ area;
}//bfs只需將函式部分替換即可
intbfs
(vectorint>>
& grid,
int x,
int y)
;int addy[4]
=;int area =1;
grid[x]
[y]=0;
while
(!nodes.
empty()
) grid[newx]
[newy]=0
; nodes.
push
(make_pair
(newx, newy));
area++;}
}return area;}}
;
把想要訪問的結點放到棧裡,當取出時就訪問它。如果棧不為空則說明我們仍然有想要訪問的結點。(本質上沒啥區別)
class
solution
;int dj[4]
=;for(
int index =
0; index !=4;
++index)
} ans =
max(ans, cur);}
return ans;}}
;
島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...
島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...
島嶼的最大面積
題目 給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 ...