【发布时间】:2020-01-23 08:46:02
【问题描述】:
我有一个有向无环图(由邻接矩阵给出)、一个源节点和一个汇节点。我想找到一组路径 P 的基数不超过边的数量,从源到接收器,这样对于图中的每个边 e,在 @ 中存在一个路径 p 987654325@ 这样的e 在p。
我的想法是找到图中的所有路径,一旦我覆盖了所有边,我就会停下来。我认为这个想法不是最好的,可能还有更好的方法。
我从this code开始:
def all_paths(adjm, source, sink, path, edges):
# def covered(E, P):
# e = []
# for p in P:
# e.extend([(p[i], p[i + 1]) for i in range(len(p) - 1)])
# if set(e) == set(E):
# return True
# else:
# return False
path = path + [source]
if source == sink:
return [path]
paths = []
for child in range(source + 1, adjm.shape[0]): # I assume that the nodes are ordered
if adjm[source, child] == 1:
if child not in path:
# if not covered(edges, paths):
paths.extend(all_paths(adjm, child, sink, path, edges))
return paths
【问题讨论】:
-
如何检查是否所有边缘都被覆盖?
-
查看我的编辑。但是,该代码没有给出预期的结果。我仍在调试以找出覆盖的功能不起作用的原因。
-
到底是什么问题,你的问题是什么?
标签: python algorithm graph-algorithm directed-acyclic-graphs