图论入门编程

卡码网刷题链接: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()
相关推荐
yi.Ist29 分钟前
数据结构 —— 键值对 map
数据结构·算法
s1533532 分钟前
数据结构-顺序表-猜数字
数据结构·算法·leetcode
Coding小公仔35 分钟前
LeetCode 8. 字符串转换整数 (atoi)
算法·leetcode·职场和发展
GEEK零零七40 分钟前
Leetcode 393. UTF-8 编码验证
算法·leetcode·职场和发展·二进制运算
DoraBigHead2 小时前
小哆啦解题记——异位词界的社交网络
算法
木头左3 小时前
逻辑回归的Python实现与优化
python·算法·逻辑回归
lifallen7 小时前
Paimon LSM Tree Compaction 策略
java·大数据·数据结构·数据库·算法·lsm-tree
web_Hsir9 小时前
vue3.2 前端动态分页算法
前端·算法
地平线开发者11 小时前
征程 6M 部署 Omnidet 感知模型
算法·自动驾驶
秋说12 小时前
【PTA数据结构 | C语言版】线性表循环右移
c语言·数据结构·算法