力扣-图论-14【算法学习day.64】

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

tips:板子题就不分析了

1.网格图中鱼的最大数目

题目链接: 2658. 网格图中鱼的最大数目 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    int[][] grid;
    int n,m;
    int flag[][];
    int flag2;
    int ans = 0;
    public int findMaxFish(int[][] grid) {
        this.grid = grid;
        n = grid.length;
        m = grid[0].length;
        flag = new int[n][m];
        for(int i = 0;i<n;i++){
            for(int j = 0;j<m;j++){
                if(grid[i][j]>0&&flag[i][j]==0){
                    flag2 = 0;
                    recursion(i,j);
                    ans = Math.max(ans,flag2);
                }
            }
        }
        return ans;
    }
    public void recursion(int x,int y){
        flag[x][y] = 1;
        flag2+=grid[x][y];
        if(x+1<n&&grid[x+1][y]>0&&flag[x+1][y]==0){
            recursion(x+1,y);
        }
        if(y+1<m&&grid[x][y+1]>0&&flag[x][y+1]==0){
            recursion(x,y+1);
        }
        if(x-1>=0&&grid[x-1][y]>0&&flag[x-1][y]==0){
            recursion(x-1,y);
        }
        if(y-1>=0&&grid[x][y-1]>0&&flag[x][y-1]==0){
            recursion(x,y-1);
        }
    }
}

2.边界着色

题目链接: 1034. 边界着色 - 力扣(LeetCode)

题面:

代码:

java 复制代码
class Solution {
    int[][] grid;
    int color;
    int n,m;
    int[][] flag;
    public int[][] colorBorder(int[][] grid, int row, int col, int color) {
        this.grid = grid;
        this.color = color;
        n = grid.length;
        m = grid[0].length;
        flag = new int[n][m];
        recursion(row,col);
        return grid;
    }
    public void recursion(int x,int y){
        flag[x][y] = 1;
        int flag2 = 0;
        if(x+1<n){
            if(grid[x+1][y]==grid[x][y]&&flag[x+1][y]==0){
                recursion(x+1,y);
            }
            if(grid[x+1][y]!=grid[x][y]&&flag[x+1][y]==0){
                flag2 =1;
            }
        }
        if(x-1>=0){
            if(grid[x-1][y]==grid[x][y]&&flag[x-1][y]==0){
                recursion(x-1,y);
            }
            if(grid[x-1][y]!=grid[x][y]&&flag[x-1][y]==0){
                flag2 =1;
            }

        }
        if(y-1>=0){
            if(grid[x][y-1]==grid[x][y]&&flag[x][y-1]==0){
                recursion(x,y-1);
            }
            if(grid[x][y-1]!=grid[x][y]&&flag[x][y-1]==0){
                flag2 =1;
            }

        }
        if(y+1<m){
            if(grid[x][y+1]==grid[x][y]&&flag[x][y+1]==0){
                recursion(x,y+1);
            }
            if(grid[x][y+1]!=grid[x][y]&&flag[x][y+1]==0){
                flag2 =1;
            }

        }
        // System.out.println(x+"       "+y+"       "+flag2);
        if(flag2==1||x==n-1||x==0||y==m-1||y==0){
            grid[x][y] =color;
        }
    }
}

后言

上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!

相关推荐
四维碎片36 分钟前
【Qt】UDP跨平台调试工具
qt·学习·udp
好奇龙猫1 小时前
【人工智能学习-AI入试相关题目练习-第十八次】
人工智能·学习
C雨后彩虹1 小时前
CAS与其他并发方案的对比及面试常见问题
java·面试·cas·同步·异步·
程序员辣条1 小时前
AI产品经理:2024年职场发展的新机遇
人工智能·学习·职场和发展·产品经理·大模型学习·大模型入门·大模型教程
_不会dp不改名_1 小时前
leetcode_3010 将数组分成最小总代价的子数组 I
算法·leetcode·职场和发展
wanping158259923412 小时前
AI Agent(学习六-FAISS 持久化到磁盘(重启不丢记忆))
人工智能·学习·faiss
知识分享小能手2 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
java1234_小锋2 小时前
Java高频面试题:SpringBoot为什么要禁止循环依赖?
java·开发语言·面试
2501_944525542 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 账户详情页面
android·java·开发语言·前端·javascript·flutter
计算机学姐2 小时前
基于SpringBoot的电影点评交流平台【协同过滤推荐算法+数据可视化统计】
java·vue.js·spring boot·spring·信息可视化·echarts·推荐算法