求最大岛屿面积问题

思想:访问二维数组的每一个元素,如果值为1,就访问他的 上下左右四个节点,顺便累加,直到上下左右不为一,或者超出范围停止递归,返回最终结果。

package lectout;
/*
最大岛屿问题
dfs深度遍历
 */
public class Demo7 {
    public static void main(String[] args) {
        int[][] nums={
                {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}
        };
        int i = maxArea(nums);
        System.out.println(i);
    }
    public static int maxArea(int[][] nums)
    {
        int result=0;
        //遍历每一个数组元素
        for(int i=0;i<nums.length;i++)
        {
            for(int j=0;j<nums[0].length;j++)
            {
                if(nums[i][j]==1)
                {
                    //记住每次找到的最大的岛屿
                    result=Math.max(finMax(nums,i,j),result);
                }
            }
        }
        return result;
    }
    public static int finMax(int[][] nums,int i,int j)
    {
        /*
        如果递归回来的
        i<0   j<0  i>=nums.length超出范围  j>=nums[0].length超出范围
        nums[i][j]!=1 为什么会有不等于1的 因为刚刚开始传进来的值为一,不代表传进来的它的上下左右都是一
        都统统return 0 让其停止递归
         */
        if(i<0||j<0||i>=nums.length||j>=nums[0].length||nums[i][j]!=1)
        {
            return 0;
        }
        //为了让遍历过的岛屿不再被遍历  让他赋值为0
        nums[i][j]=0;
        //因为自己是1  所以加个1  然后再看看上下左右有没有岛屿 也就是元素为1的岛  有就加上
        return 1+finMax(nums,i+1,j)+finMax(nums,i-1,j)+finMax(nums,i,j-1)+finMax(nums,i,j+1);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值