695. 島嶼的最大面積(DFS)
阿新 • • 發佈:2022-05-29
labuladong 題解思路 難度中等
給你一個大小為 m x n
的二進位制矩陣 grid
。
島嶼 是由一些相鄰的 1
(代表土地) 構成的組合,這裡的「相鄰」要求兩個 1
必須在 水平或者豎直的四個方向上 相鄰。你可以假設 grid
的四個邊緣都被 0
(代表水)包圍著。
島嶼的面積是島上值為 1
的單元格的數目。
計算並返回 grid
中最大的島嶼面積。如果沒有島嶼,則返回面積為 0
。
示例 1:
輸入:grid = [[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:
輸入:grid = [[0,0,0,0,0,0,0,0]] 輸出:0
class Solution { public: vector<vector<int>> dirs = {{1,0},{-1,0},{0,1},{0,-1}}; void dfs(int& area,int i, int j, vector<vector<int>>& grid) { if( i<0 || i>=grid.size() || j<0 || j >= grid[0].size()) { return; } if (grid[i][j] == 0) { return; } grid[i][j] = 0; area++; for(auto ch : dirs) { dfs(area,i+ch[0],j+ch[1],grid); } } int maxAreaOfIsland(vector<vector<int>>& grid) {int cnt = 0; for(int i = 0;i < grid.size();i++) { for (int j = 0 ; j < grid[0].size();j++) { if(grid[i][j]==1) { int area = 0; dfs(area,i,j,grid); cnt = max(cnt,area); } } } return cnt; } };