我有一个Directed Acyclic Graph(DAG),它由层组成,后面两层完全是二分的(很像神经网络),如下所示:
我希望以一种迭代的方式将DAG中的所有路径流化,通过一些生成器,以随机顺序。因为,输出必须不按顺序,教科书中的DFS方法是不可能的。内存是一个问题,所以我不想存储以前生成的任何路径,除了DAG之外,它可以被修改,但是需要修改。在
例如,上述DAG的期望输出为:(1, 4, 6, 8)
(3, 4, 5, 8)
(2, 4, 7, 8)
(3, 4, 6, 8)
(1, 4, 5, 8)
(3, 4, 7, 8)
(1, 4, 7, 8)
(2, 4, 6, 8)
(2, 4, 5, 8)
而不是由DFS生成的以下内容:
^{pr2}$
谢谢你的帮助。在
更新:
我有以下代码graph = {
1: set([4]),
2: set([4]),
3: set([4]),
4: set([5, 6, 7]),
5: set([8]),
6: set([8]),
7: set([8])
}
def dfs_paths(graph, start, goal):
stack = [(start, [start])]
while stack:
(vertex, path) = stack.pop()
for next in graph[vertex] - set(path):
if next == goal:
yield path + [next]
else:
stack.append((next, path + [next]))
def run_paths():
for start in [1, 2, 3]:
for path in dfs_paths(graph, start, 8):
print path
找到所有的路径然后随机流式传输对我来说不起作用,因为我不想存储我将要生成的任何路径。在