代码随想录图论部分-695. 岛屿的最大面积|1020. 飞地的数量

695. 岛屿的最大面积

题目 :给你一个大小为 m x n 的二进制矩阵 grid 。岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。岛屿的面积是岛上值为 1 的单元格的数目。

计算并返回 grid 中最大的岛屿面积。如果没有岛屿,则返回面积为 0
题目链接695. 岛屿的最大面积

和岛屿数量很像 这里比较一个最值就行

java 复制代码
class Solution {
    public int[][] move={{0,1},{0,-1},{1,0},{-1,0}};
    public boolean[][] visited;
    public int maxAreaOfIsland(int[][] grid) {
        int max=0;
        visited=new boolean[grid.length][grid[0].length];
        for(int i=0;i<grid.length;i++){
            for(int j=0;j<grid[0].length;j++){
                if(!visited[i][j]&&grid[i][j]==1){
                    max=Math.max(max,bfs(grid,i,j));  
                }
            }
        }
        return max;  
    }
    public int bfs(int[][] grid,int x,int y){
        int num=1;
        Queue<int[]> queue=new LinkedList<>();
        queue.offer(new int[]{x,y});
        visited[x][y]=true;
        while(!queue.isEmpty()){
            int[] node=queue.poll();
            for(int p=0;p<4;p++){
            int nextx=node[0]+move[p][0];
            int nexty=node[1]+move[p][1];
            if(nextx<0||nextx>=grid.length||nexty<0||nexty>=grid[0].length){
                continue;
            }
            if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){
                queue.offer(new int[]{nextx,nexty});
                visited[nextx][nexty]=true;
                num++;
            }
            }
        }
        return num;
    }
}

1020. 飞地的数量

题目 :给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。一次移动是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。返回网格中无法在任意次数的移动中离开网格边界的陆地单元格的数量。

题目链接: [1020. 飞地的数量](https://leetcode.cn/problems/number-of-enclaves/description/)

遇到边界则记录 不能遇到边界就退出 需要找到所有联通的点进行标记

java 复制代码
class Solution {
    public int[][] move={{0,1},{0,-1},{1,0},{-1,0}};
    public boolean[][] visited;
    public boolean flag;
    public int numEnclaves(int[][] grid) {
        int nums=0;
        visited=new boolean[grid.length][grid[0].length];
        for(int i=0;i<grid.length;i++){
            for(int j=0;j<grid[0].length;j++){
                if(!visited[i][j]&&grid[i][j]==1){
                    flag=false;
                    int num=bfs(grid,i,j);
                    if(flag==false){
                        nums+=num;
                    }                          
                }
            }
        }
        return nums;  
    }
    public int bfs(int[][] grid,int x,int y){
        if(x==0||x==grid.length-1||y==0||y==grid[0].length-1){
            flag=true;
        }
        int num=1;
        Queue<int[]> queue=new LinkedList<>();
        queue.offer(new int[]{x,y});
        visited[x][y]=true;
        while(!queue.isEmpty()){
            int[] node=queue.poll();
            for(int p=0;p<4;p++){
            int nextx=node[0]+move[p][0];
            int nexty=node[1]+move[p][1];
            if(nextx<0||nextx>=grid.length||nexty<0||nexty>=grid[0].length){
                continue;
            }
            if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){
                if(nextx==0||nextx==grid.length-1||nexty==0||nexty==grid[0].length-1)       {
                    flag=true;
                }
                queue.offer(new int[]{nextx,nexty});
                visited[nextx][nexty]=true;
                num++;
            }
            }
        }
        return num;
    }
}
相关推荐
冲帕Chompa34 分钟前
图论part10 bellman_ford算法
数据结构·算法·图论
珂朵莉MM10 小时前
2024 睿抗机器人开发者大赛CAIP-编程技能赛-专科组(国赛)解题报告 | 珂学家
开发语言·人工智能·算法·leetcode·职场和发展·深度优先·图论
callJJ11 小时前
Bellman - Ford 算法与 SPFA 算法求解最短路径问题 ——从零开始的图论讲解(4)
数据结构·算法·蓝桥杯·图论·单源最短路径·bellman- ford算法
pystraf1 天前
模板分享:网络最小费用流
c++·算法·图论·网络流
啊我不会诶2 天前
CF每日5题(1300-1500)
算法·深度优先·图论
冲帕Chompa2 天前
图论拓扑排序
图论
freyazzr2 天前
Leetcode刷题 | Day63_图论08_拓扑排序
数据结构·c++·算法·leetcode·图论
Nobkins2 天前
2023CCPC河南省赛暨河南邀请赛个人补题ABEFGHK
开发语言·数据结构·c++·算法·图论
程序媛小盐4 天前
贪心算法:最小生成树
算法·贪心算法·图论
yuhao__z4 天前
代码随想录算法训练营第六十三天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
算法·图论