gpt4 book ai didi

python - 有向树(igraph)中从一个节点到另一个节点的所有可能路径

转载 作者:太空狗 更新时间:2023-10-29 18:03:25 25 4
gpt4 key购买 nike

我使用 python bindingigraph来表示有向树。我想找到从该图中的一个节点到另一个节点的所有可能路径。不幸的是,我在 igraph 中找不到执行此任务的现成函数?

编辑

无限条路径的问题

我说的图其实是单根有向无环图(DAG)。它表示事件的单向级联,在级联的各个级别上,这些事件可以拆分或连接在一起。正如我所说,这是一个单向图。还提供该图不包含任何循环。由于这两个原因,无限的路径列表是不可能的。

我想做什么?

我的目标是找到从图的顶部(根)到给定节点的所有可能路径。

最佳答案

您正在有向无环图 (DAG) 中寻找一个节点与另一个节点之间的所有路径。

树始终是 DAG,但 DAG 并不总是树。不同之处在于树的分支不允许连接,只能分开,而 DAG 的分支可以一起流动,只要不引入循环即可。

您的解决方案可以在 "Python Patterns - Implementing Graphs." 中的 find_all_paths() 中找到这需要稍作调整才能与 igraph 一起使用。我没有安装 igraph,但使用模拟,这似乎有效:

def adjlist_find_paths(a, n, m, path=[]):
"Find paths from node index n to m using adjacency list a."
path = path + [n]
if n == m:
return [path]
paths = []
for child in a[n]:
if child not in path:
child_paths = adjlist_find_paths(a, child, m, path)
for child_path in child_paths:
paths.append(child_path)
return paths

def paths_from_to(graph, source, dest):
"Find paths in graph from vertex source to vertex dest."
a = graph.get_adjlist()
n = source.index
m = dest.index
return adjlist_find_paths(a, n, m)

文档中不清楚 adjlist 是顶点索引列表的列表还是顶点对象列表本身的列表。我假设列表包含索引以简化 adjlist 的使用。结果,返回的路径是根据顶点索引。如果您需要这些,则必须将它们映射回顶点对象,或者调整代码以附加顶点而不是其索引。

关于python - 有向树(igraph)中从一个节点到另一个节点的所有可能路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3971876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com