首页 > 其他 > 详细

搜索(DFS)---查找最大连通面积

时间:2019-06-30 16:47:37      阅读:100      评论:0      收藏:0      [点我收藏+]

查找最大的连通面积

695. Max Area of Island (Medium)

[[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]]

题目描述:

??矩阵中1表示小岛,0表示海水,题目要求求出最大的联通面积。

思路分析:

??使用深度优先搜索,在遍历到1时,从1出发,继续向四周遍历,直到周围没有1,计算出联通面积,访问过的点不能再访问。

代码:

class Solution {
    public int maxAreaOfIsland(int [][]grid){
    if(grid==null||grid.length==0)
        return 0;
    int m=grid.length;
    int n=grid[0].length;
    int maxArea=0;
    for(int i=0;i<m;i++){
        for(int j=0;j<n;j++){
            maxArea=Math.max(maxArea,dfs(grid,i,j));
        }
    }
    return maxArea;
}
public int dfs(int [][]grid,int r,int c){
    int [][]direction={{0,1},{0,-1},{1,0},{-1,0}};
    if(r<0||r>=grid.length||c<0||c>=grid[0].length||grid[r][c]==0)
        return 0;
    grid[r][c]=0; //标记已经访问过
    int area=1;
    for(int[] d:direction){
        area+=dfs(grid,r+d[0],c+d[1]);
    }
    return area;
}
}

搜索(DFS)---查找最大连通面积

原文:https://www.cnblogs.com/yjxyy/p/11110079.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!