day50 第十一章:图论part01

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

图论理论基础

连通性:

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

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

图的构造:

邻接矩阵

优点:

表达简单

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

适合稠密图

缺点:

n*n,不适合稀疏图

邻接表

优点:

空间利用率高

缺点:

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

回溯就是深度优先搜索

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

深搜理论基础

98. 所有可达路径

邻接矩阵:n*n的矩阵

python 复制代码
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

python 复制代码
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()
    

广搜理论基础

相关推荐
罗湖老棍子3 小时前
【模板】并查集(洛谷P3367)
算法·图论·并查集
wanderist.5 小时前
C++输入输出的一些问题
开发语言·c++·图论
Snow_day.1 天前
有关排列排列组合(1)
数据结构·算法·贪心算法·动态规划·图论
初晴や2 天前
【C++】图论:基础理论与实际应用深入解析
c++·算法·图论
闻缺陷则喜何志丹2 天前
【图论 DFS 换根法】3772. 子图的最大得分|2235
c++·算法·深度优先·力扣·图论·换根法
君义_noip4 天前
信息学奥赛一本通 2134:【25CSPS提高组】道路修复 | 洛谷 P14362 [CSP-S 2025] 道路修复
c++·算法·图论·信息学奥赛·csp-s
罗湖老棍子4 天前
信使(msner)(信息学奥赛一本通- P1376)四种做法
算法·图论·dijkstra·spfa·floyd·最短路算法
修炼地4 天前
代码随想录算法训练营第五十三天 | 卡码网97. 小明逛公园(Floyd 算法)、卡码网127. 骑士的攻击(A * 算法)、最短路算法总结、图论总结
c++·算法·图论
罗湖老棍子5 天前
【例4-6】香甜的黄油(信息学奥赛一本通- P1345)
算法·图论·dijkstra·floyd·最短路算法·bellman ford
--JR6 天前
015——图(1.图的相关概念与存储)
数据结构·c++·算法·链表·图论