遍历图中两点间所有路径 Python代码
非常暴力,直接搜索
求图中两点间的所有路径(包括最短路径)
求(有向)图中任意两点间所有路径
快速寻找有向图中两点间的所有路径
输入邻接矩阵(Numpy矩阵),起点,终点,
返回包含图中起点和终点间所有路径的list
def find_all_path(self, graph, start, end):
p = [[start, ]]
pd = []
while len(p): # 仍有潜在可行路径
new_p = []
for path in p:
node_now = path[-1] # 取出最后一个点
if node_now == end: # 到达终点
pd.append(path) # 存储完成路径
p.pop(p.index(path)) # 清理
else:
adjacent_nodes = np.where(graph[node_now, :])
adjacent_nodes = adjacent_nodes[0]
adjacent_nodes = adjacent_nodes.tolist()
for i in range(len(adjacent_nodes) - 1, -1, -1): # 刨除重复
if adjacent_nodes[i] in path:
adjacent_nodes.pop(i)
if len(adjacent_nodes) == 0:
p.pop(p.index(path)) # 清理
if len(path) > self.jump_number_max: # 用于速度优化,节点数少时没用
p.pop(p.index(path)) # 清理
for node in adjacent_nodes: # 尝试所有可行可能性
temp = copy.deepcopy(path)
temp.append(node)
new_p.append(temp)
p = new_p
return pd
非常暴力,复杂度非常高,节点数多了肯定不行
优势是简单易懂