每日一題 島嶼的最大面積

2021-10-03 22:25:22 字數 1741 閱讀 8012

給定乙個包含了一些 0 和 1的非空二維陣列 grid , 乙個 島嶼 是由四個方向 (水平或垂直) 的 1 (代表土地) 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。

找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為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。

求網格中最大的連通區域的面積,最直觀的思路就是使用bfs或者dfs搜尋出每乙個連通區域的面積。

演算法如下:遍歷整個地圖,遇到 == 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 ...