給定乙個包含了一些 0 和 1 的非空二維陣列 grid 。
乙個 島嶼 是由一些相鄰的 1 (代表土地) 構成的組合,這裡的「相鄰」要求兩個 1 必須在水平或者豎直方向上相鄰。你可以假設 grid 的四個邊緣都被 0(代表水)包圍著。
找到給定的二維陣列中最大的島嶼面積。(如果沒有島嶼,則返回面積為 0 。)
注意: 給定的矩陣grid 的長度和寬度都不超過 50。
這題求島嶼最大面積,又要求島嶼要連續,其實就是可達性問題很明顯要用dfs。
知道要用dfs了就去套dfs模板,具體細節看**注釋
class
solution
int res =0;
//用來儲存結果
for(
int r =
0; r < grid.length; r++)}
}return res;
}public
intdfs
(int
grid,
int r,
int c)
if(grid[r]
[c]!=1)
grid[r]
[c]=0;
//經過前面兩個if篩選。可以確保正在遍歷的這個值是島嶼(1),遍歷過後為了避免再次遍歷,就將它變成0,簡稱「沉島」。【還可以建乙個集合visited用來儲存遍歷過的島嶼,但是這題沒有要求不能修改原陣列,為了節省空間我們就直接修改原陣列為0】
int area =1;
//正在遍歷的值為1,是島嶼,所以島嶼數量至少為1.
area +=
dfs(grid, r -
1, c)
;//向上遍歷
area +=
dfs(grid, r +
1, c)
;//向下遍歷
area +=
dfs(grid, r, c -1)
;//向左遍歷
area +=
dfs(grid, r, c +1)
;//向右遍歷
//上面四句area+=***;相當於把上下左右四個方向的島嶼數量全加起來了。
return area;
}}
695 島嶼的最大面積 DFS
給定乙個包含了一些 0 和 1 的非空二維陣列 grid 乙個 島嶼 是由一些相鄰的 1 代表土地 構成的組合,這裡的 相鄰 要求兩個 1 必須在水平或者豎直方向上相鄰。你可以假設 grid 的四個邊緣都被 0 代表水 包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為 0 示例...
695 島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...
695 島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列 grid 乙個 島嶼 是由四個方向 水平或垂直 的 1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0...