1. 程式人生 > 其它 >695. 島嶼的最大面積(DFS)

695. 島嶼的最大面積(DFS)

 

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; } };