图论入门编程

卡码网刷题链接: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()
相关推荐
香菜大丸1 分钟前
详解 指针函数,函数指针,函数指针函数
开发语言·c++·算法
cv2016_DL5 分钟前
BERT相关知识
人工智能·算法·transformer
大大大反派12 分钟前
深入了解决策树---机器学习中的经典算法
算法·决策树·机器学习
呆萌很24 分钟前
2039:【例5.6】冒泡排序
算法
冉佳驹2 小时前
数据结构 ——— 快速排序的时间复杂度以及规避最坏情况的方法
c语言·数据结构·算法·排序算法·快速排序算法·三数取中
徐浪老师3 小时前
C语言实现冒泡排序:从基础到优化全解析
c语言·算法·排序算法
李小白663 小时前
各种排序算法
数据结构·算法·排序算法
浪前3 小时前
排序算法之冒泡排序篇
数据结构·算法·排序算法
小黄编程快乐屋3 小时前
各个排序算法基础速通万字介绍
java·算法·排序算法