以此图为例:
求解有向图两点之间的所有路径
主要采用深度遍历思想:
# 输入顶点个数
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)
输入:
5
6
0
2
0 1 1
0 2 2
0 3 1
1 2 1
2 4 1
3 4 1
输出:
[[0, 1, 2], [0, 2]]