Find all paths between two points in a directed graph

Take this picture as an example:
insert image description here

Find all paths between two points in a directed graph

Mainly adopt the idea of ​​depth traversal:

# 输入顶点个数
vertex_num = int(input())
# 输入边的条数
edge_num = int(input())
# 输入起始点
start = int(input())
# 输入终点
end = int(input())
# 初始化邻接矩阵
graph = [[0 for _ in range(vertex_num)] for _ in range(vertex_num)]
# 初始化visit数组 -- 用于在dfs中记录访问过的顶点信息
visit = [0 for _ in range(vertex_num)]
# 存储每条可能的路径
path = []
# 存储最终路径集合
result_path = []
# 创建图
for i in range(edge_num):
    # 输入路径(0 1 表示: 0可以到1)
    a_list = input().split(" ")
    graph[int(a_list[0])][int(a_list[1])] = 1


def dfs(start):
    # 表示start点已经访问过了
    visit[start] = 1
    # 访问过的点放入path列表
    path.append(start)
    # 如果当前访问的点是终点,则加入result_path
    if start == end:
        result_path.append(path[:])
    else:  # 递归遍历
        i = 0
        while i < vertex_num:
            if visit[i] == 0 and i != start and graph[start][i] != 0:
                dfs(i)
            i = i + 1
    # 递归完毕后进行逐一清除path中的点,为了下一条路径做准备
    path.remove(path[-1])
    # 将该点重新设置为0,即未访问状态
    visit[start] = 0


dfs(start)
print(result_path)

Input:
5
6
0
2
0 1
1 0 2 2
0 3 1
1 2 1
2 4 1
3 4 1

Output:
[[0, 1, 2], [0, 2]]

Guess you like

Origin blog.csdn.net/bradyM/article/details/125934724