图论大总结

news2024/11/23 13:28:38

图论基础

在这里插入图片描述

98. 所有可达路径

result = []
path = []
def dfs(graph,x,n):
    if x == n:
        result.append(path[:])
        return
    for i in range(1,n+1):
        if graph[x][i] == 1:
            path.append(i)
            dfs(graph,i,n)
            path.pop()
def main():
    n,m = map(int,input().split())
    # 邻接矩阵
    graph = [[0]*(n+1) for _ in range(n+1)]
    for _ in range(m):
        s,t = map(int,input().split())
        graph[s][t] = 1
    path.append(1)
    dfs(graph,1,n)
    if len(result) == 0:
        print(-1)
    for x in result:
        print(' '.join(map(str,x)))
if __name__ == "__main__":
    main()
        

岛屿问题

200. 岛屿数量

class Solution:
    def numIslands(self, grid: List[List[str]]) -> int:
        res = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == "1":
                    res += 1
                    self.dfs(grid,i,j)
        return res
    
    def dfs(self,grid,x,y):
        # 判断(x,y)是否在网格范围内
        if not (x >= 0 and y >=0 and x <len(grid) and y<len(grid[0])):
            return
        if grid[x][y] != "1": # 海洋格子以及遍历过的陆地格子直接返回
            return 
        grid[x][y] = "2"
        self.dfs(grid,x-1,y) # 上
        self.dfs(grid,x+1,y) # 下
        self.dfs(grid,x,y-1) # 左
        self.dfs(grid,x,y+1) # 右

695. 岛屿的最大面积

class Solution:
    def dfs(self,grid,x,y,i):
        if not (x >= 0 and x < len(grid) and y >= 0 and y < len(grid[0])):
            return 0
        if grid[x][y] == 0:
            return 0
        grid[x][y] = i
        s1 = self.dfs(grid,x-1,y,i)
        s2 = self.dfs(grid,x+1,y,i)
        s3 = self.dfs(grid,x,y-1,i)
        s4 = self.dfs(grid,x,y+1,i)
        return 1 + s1 + s2 + s3 + s4

    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        maxarea = 0
        num = 2
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1:
                    res = self.dfs(grid,i,j,num)
                    maxarea = max(maxarea,res)
                    num += 1
        return maxarea

827. 最大人工岛

class Solution:
    def dfs(self,grid,x,y,i):
        if not (x >= 0 and x < len(grid) and y >= 0 and y < len(grid[0])):
            return 0
        # grid == 0 : 海洋 grid == 1 : 陆地但没被遍历过 grid == i 陆地但遍历过
        if grid[x][y] != 1:
            return 0
        grid[x][y] = i 
        s1 = self.dfs(grid,x-1,y,i)
        s2 = self.dfs(grid,x+1,y,i)
        s3 = self.dfs(grid,x,y-1,i)
        s4 = self.dfs(grid,x,y+1,i)
        return 1 + s1 + s2 + s3 + s4
    
    def dfs2(self,grid,x,y,island_area):
        if not (x >= 0 and x < len(grid) and y >= 0 and y < len(grid[0])):
            return 0
        # grid == 0 : 海洋(没被遍历) grid == 1 : 海洋(被遍历) grid == i 陆地面积
        if grid[x][y] == 1:
            return 0
        if grid[x][y] != 0:
            return island_area[grid[x][y]]
        grid[x][y] = 1
        s1 = self.dfs2(grid,x-1,y,island_area)
        s2 = self.dfs2(grid,x+1,y,island_area)
        s3 = self.dfs2(grid,x,y-1,island_area)
        s4 = self.dfs2(grid,x,y+1,island_area)
        s = set(grid[x-1][y],grid[x+1][y],grid[x][y-1],grid[x][y+1])


        return s1 + s2 + s3 + s4


    def largestIsland(self, grid: List[List[int]]) -> int:
        island_area = {}
        num = 2
        res = 0
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 1:
                    area = self.dfs(grid,i,j,num)
                    island_area[num] = area
                    num += 1
        print(grid)
        print(island_area)
        for i in range(len(grid)):
            for j in range(len(grid[0])):
                if grid[i][j] == 0:
                    sea_area = self.dfs2(grid,i,j,island_area)
                    res = max(res,1+sea_area)
        return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195956.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EXCEL数据处理】000021 案例 保姆级教程,附多个操作案例。EXCEL文档安全性设置。

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【EXCEL数据处理】000021 案例 保姆级教程&#xff0c;附多个操作案例。…

C#高级编程笔记--字符串和正则表达式

本章的主要内容如下&#xff1a; 创建字符串 格式化表达式 正则表达式​​​​​​​ 1.1 System.String类 System.String是一个类&#xff0c;专门用于存储字符串&#xff0c;允许对字符串进行许多操作。由于这种数据类型非常重要&#xff0c;C#提供了它自己…

【C++堆(优先队列)】2233. K 次增加后的最大乘积|1685

本文涉及知识点 C堆(优先队列) 贪心&#xff08;决策包容性) LeetCode 2233. K 次增加后的最大乘积 给你一个非负整数数组 nums 和一个整数 k 。每次操作&#xff0c;你可以选择 nums 中 任一 元素并将它 增加 1 。 请你返回 至多 k 次操作后&#xff0c;能得到的 nums的 最…

用Python实现运筹学——Day 15: 线性规划的项目实战

一、学习内容 在本节中&#xff0c;我们将综合应用之前学习的线性规划知识&#xff0c;解决一个复杂的实际问题。通过这个实战项目&#xff0c;进一步理解线性规划在资源分配问题中的应用。 二、实战案例&#xff1a;公司资源分配问题 2.1 问题描述&#xff1a; 某公司生产两…

Conda答疑

文章目录 优雅的使用Conda管理python环境1. conda info -e 和conda env list区别2.conda创建环境 创建的新环境在哪个文件夹下3. 自定义路径4. anaconda 新建环境 包是来自哪里4.1. 默认 Anaconda 仓库4.2. Conda-Forge4.3. 镜像源4.4. 自定义频道4.5. 总结 5. conda config --…

Spring Boot:打造下一代医院管理系统

3系统分析 3.1可行性分析 通过对本医院管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医院管理系统采用JAVA作为开发语言&#xff0c;Spring Boot框…

electron打包报错-winCodeSign无法下载

electron打包报错-winCodeSign下载问题 问题描述 downloaded urlhttps://registry.npmmirror.com/-/binary/electron-builder-binaries/winCodeSign-2.6.0/winCodeSign-2.6.0.7z duration1.577s⨯ cannot execute causeexit status 2outerrorOutERROR: Cannot create s…

C++ | Leetcode C++题解之第463题岛屿的周长

题目&#xff1a; 题解&#xff1a; class Solution {constexpr static int dx[4] {0, 1, 0, -1};constexpr static int dy[4] {1, 0, -1, 0}; public:int dfs(int x, int y, vector<vector<int>> &grid, int n, int m) {if (x < 0 || x > n || y <…

【Canvas与色彩】十二等分多彩隔断圆环

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>隔断圆环Draft4十二等分多彩</title><style type"text…

华为Nova12活力版nova 11,FIN-AL60/FOA-AL00手机忘记密码到底怎么解锁无法激活设备已锁定平台工具软件固件使用解决方案

手机忘记密码到底怎么解锁修理好.弄好刷机解锁视频看了一些没弄好现在图文分享最祥细的教程方法有帐用户锁不再难了华为Nova12活力版nova 11,FIN-AL60/FOA-AL00设备关联至陌生华为账号并被锁定 忘记密码如何破解恢复出厂设置了怎样才能激活-怎样跳过帐号密码激活手机,解锁方案工…

SQL专项练习第六天

Hive 在处理不同数据需求时的灵活性和强大功能&#xff0c;包括间隔连续问题的处理、行列转换、交易数据查询、用户登录统计以及专利数据分析等方面。本文将介绍五个 Hive 数据处理问题的解决方案&#xff0c;并通过实际案例进行演示。 先在home文件夹下建一个hivedata文件夹&a…

玩客云刷派享云教程

玩客云刷机教程 扫描该二维码注册 打开网站&#xff08;xxxxxxx&#xff09; 输入你的id 然后点击生成就可以拿到该设备的下载链接(UBOOT) 详细文档&#xff1a;https://www.123684.com/s/WGAwjv-SNlv3 &#xff08;有不懂看详细文档&#xff09; 准备⼯作 •⼯具软件&…

【JVM系列】深入理解Java虚拟机(JVM)的核心技术:从加载到初始化的全过程解析(一、Java类加载器)

文章目录 【JVM系列】深入理解Java虚拟机&#xff08;JVM&#xff09;的核心技术&#xff1a;从加载到初始化的全过程解析(一、Java类加载器)1. 类加载器加载的过程2. Class文件读取来源3. 类加载器的分类4. 那些操作会初始化类加载器5. 类加载器的双亲委派机制6. ClassLoader源…

Dolma:包含三万亿Token的语言模型预训练研究开放语料库

前言 原论文&#xff1a;Dolma: an Open Corpus of Three Trillion Tokens for Language Model Pretraining Research 摘要 关于训练当前最佳性能语言模型的预训练语料库的信息很少被讨论——商业模型很少详细说明它们的数据&#xff0c;即使是开源模型也往往在没有训练数据…

操作系统 | 学习笔记 | 王道 | 3.2 虚拟内存管理

3.2 虚拟内存管理 3.2.1 虚拟内存的基本概念 传统存储管理方式的特征 传统存储管理方式 连续分配 单一连续分配固定分区分配动态分区分配 非连续分配 基本分页存储管理基本分段存储管理基本段页式存储管理 特征&#xff1a; 一次性&#xff1a; 作业必须一次性全部装入内存后…

『网络游戏』制作提示弹窗UI【03】

将上一章的创建角色界面隐藏 创建一个空节点重命名为DynamicWnd 设置父物体为伸展 钉在中间创建一个Text文本组件 添加动画Animation组件 创建自定义动画Animation动画 点击创建 选择指定文件夹 拖拽至Animation 使用记录动画方式编辑动画首先点击红点录制 在第0帧设置文字透明…

最简单的示例:通过JDBC查询数据

引言 在现代企业级应用开发中&#xff0c;持久层框架&#xff08;如 MyBatis、Hibernate 等&#xff09;极大地简化了数据库操作&#xff0c;提高了开发效率和代码的可维护性。本文将通过一个最简单的示例&#xff0c;演示如何使用 JDBC 连接数据库、执行 SQL 语句以及处理结果…

LabVIEW技术难度最大的程序

在LabVIEW开发中&#xff0c;技术难度最大的程序通常涉及复杂的系统架构、高精度的控制要求、大量数据处理&#xff0c;以及跨平台或多硬件设备的集成。以下是几类具有高技术难度的LabVIEW程序&#xff1a; 1. 高精度实时控制系统 LabVIEW中涉及高精度实时控制的系统程序&…

金纳米星“融入”水凝胶,原位生长的奥秘,应用前景的探索

大家好&#xff01;今天来了解一项在三维水凝胶表面生长金纳米星的研究——《Growing Gold Nanostars on 3D Hydrogel Surfaces》发表于《Chemistry of Materials》。水凝胶在生物医学等诸多领域有着重要应用&#xff0c;而金纳米星具有独特的光学性质。这项研究通过原位合成的…

【含开题报告+文档+PPT+源码】基于SpringBoot的校园互助平台设计与实现【包运行成功】

开题报告 现代大学校园是一个多样化且充满活力的环境&#xff0c;拥有来自不同文化和地域的学生。然而&#xff0c;这种多样性也伴随着一系列挑战&#xff0c;包括学业压力、心理健康问题、社交挑战以及适应新环境的困难。面对这些挑战&#xff0c;学生常常感到信息获取困难和…