图论入门编程

卡码网刷题链接:98. 所有可达路径

一、题目简述

二、编程demo

方法①邻接矩阵

python 复制代码
from collections import defaultdict
#简历邻接矩阵
def build_graph(): 
    n, m = map(int,input().split()) 
    graph = [[0 for _ in range(n+1)] for _ in range(n+1)]
    for _ in range(m): 
        i,j = map(int,input().split()) 
        graph[i][j] = 1
    return graph,n
#深度优先搜索
def dfs(g,r,i,end,path):
    if i == end:
        r.append(path.copy())
        return 
    for k in range(1,end+1):
        if g[i][k]:
            path.append(k)
            dfs(g,r,k,end,path)
            path.pop()
    return 
#主函数
def main():
    graph,n = build_graph()
    result = []
    path = [1]
    dfs(graph,result,1,n,path)
    #按格式打印输出
    if not result:
        print(-1)
    for p in result:
        print(" ".join(map(str,p)))
    return 
if __name__ == "__main__":
    main()

方法②邻接表

python 复制代码
from collections import defaultdict
def build_graph(): 
    n, m = map(int,input().split()) 
    graph = defaultdict(list) 
    for _ in range(m): 
        i,j = map(int,input().split()) 
        graph[i].append(j)
    return graph,n

def dfs(g,r,i,end,path):
    if i == end:
        r.append(path.copy())
        return 
    for k in g[i]:
        path.append(k)
        dfs(g,r,k,end,path)
        path.pop()
    return 

def main():
    graph,n = build_graph()
    result = []
    path = [1]
    dfs(graph,result,1,n,path)
    if not result:
        print(-1)
    for p in result:
        print(" ".join(map(str,p)))
    return 
if __name__ == "__main__":
    main()
相关推荐
承渊政道5 分钟前
【优选算法】(实战体会位运算的逻辑思维)
数据结构·c++·笔记·学习·算法·leetcode·visual studio
Frostnova丶18 分钟前
LeetCode 2573. 找出对应 LCP 矩阵的字符串
算法·leetcode·矩阵
承渊政道38 分钟前
【优选算法】(实战推演模拟算法的蕴含深意)
数据结构·c++·笔记·学习·算法·leetcode·排序算法
林鸿群41 分钟前
实现支持纳秒级精度的时间引擎(C++)
算法·定时引擎
Keep learning!1 小时前
PCA主成分分析学习
学习·算法
专注VB编程开发20年1 小时前
CUDA实现随机切割算法,显卡多线程计算
算法·cuda
2301_788770551 小时前
OJ模拟4
算法
NAGNIP2 小时前
一文搞懂CNN经典架构-AlexNet!
人工智能·算法
2401_878530212 小时前
自定义内存布局控制
开发语言·c++·算法
专注VB编程开发20年2 小时前
PNG、GIF透明游戏角色人物输出一张图片技巧,宽度高度读取
算法