当前位置: 首页 > article >正文

day50 第十一章:图论part01

ACM模式,自己控制输入输出

图论理论基础

连通性:

连通图(无向),强连通图(有向)-----  任意两个节点之间都可相互到达

连通分量(极大连通子图),强连通分量

图的构造:

邻接矩阵

优点:

表达简单

易于查找任意2个顶点之间的连接

适合稠密图

缺点:

n*n,不适合稀疏图

邻接表

优点:

空间利用率高

缺点:

不好搜索任意2点之间是否存在

回溯就是深度优先搜索

邻接表和邻接矩阵dfs写法上没有太大差异

深搜理论基础

98. 所有可达路径

邻接矩阵:n*n的矩阵

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

邻接表:defaultdict

from collections import defaultdict

def main():
    n, m = map(int, input().split())
    graph = defaultdict(list)
    
    for i in range(m):
        s, t = map(int, input().split())
        graph[s].append(t)
    
    result = []
    path = [1]
    dfs(graph, 1, n, path, result)
    
    if not result:
        print(-1)
    else:
        for path in result:
            print(' '.join(map(str, path)))
    
def dfs(graph, x, n, path, result):
    if x == n:
        result.append(path.copy())
        return
    for i in graph[x]:
        # if graph[x][i] == 1:
        path.append(i)
        dfs(graph, i, n, path, result)
        path.pop()
    
if __name__ == "__main__":
    main()
    

广搜理论基础


http://www.kler.cn/a/539126.html

相关文章:

  • CSS 伪类(Pseudo-classes)的详细介绍
  • go-elasticsearch创建ik索引并进行查询操作
  • 使用云计算,企业的数据监管合规问题如何解决?
  • Android Studio超级详细讲解下载、安装配置教程(建议收藏)
  • DeepSeek-r1和O1、O3mini谁更强?
  • 云上考场微信小程序的设计与实现(LW+源码+讲解)
  • 本地大模型编程实战(11)与外部工具交互(2)
  • Java实现状态模式
  • Linux sysfs虚拟文件系统
  • springboot主要有哪些功能
  • 多租户架构设计与实现:基于 PostgreSQL 和 Node.js
  • 激活函数篇 04 —— softmax函数
  • windows + visual studio 2019 使用cmake 编译构建静、动态库并调用详解
  • C# 封送和远程编程介绍
  • 消息编号BK062 请给会计事项RKS设置一数字域
  • AI大模型,我选本地部署国产开源DeepSeek
  • json格式化html
  • HTML开发常见错误排查技巧与浏览器兼容性解决方案
  • Java 大视界 -- Java 大数据在智能政务中的应用与服务创新(78)
  • Linux高并发服务器开发 第十六天(execlp/execl 进程回收/孤儿进程/僵尸进程 wait/waitpid回收 进程间的通信)
  • 【BUUCTF杂项题】刷新过的图片
  • [8-2-2] 队列实验_多设备玩游戏(红外改造)_重录
  • LLMs之DeepSeek r1:TinyZero(复现 DeepSeek R1 Zero 的核心功能)的简介、安装和使用方法、案例应用之详细攻略
  • SpringBoot 接口内容加密方案(RSA+AES+HMAC校验)认知
  • Python基础语法精要
  • 笔记:理解借贷相等的公式