我有一个定向加权图G,其中weight是转换的持续时间。使用加权有向图中的DFS查找两个节点之间的所有路径
我使用带修改的DFS编写了两个顶点之间的所有路径搜索算法:搜索继续进行,直到路径的总权重(其各部分的权重之和)将少一些值。我的代码在小图中工作,但在大图(| V | = 1800,| E | = 50870)中它会冻结。
def find_paths(self, start, end, weight_limit=10):
res = []
def dfs(start, end, path=[], weight=0):
path = path + [start]
if len(path) > 1:
weight += self.weights[(path[-2], start)]
if weight > weight_limit:
return []
if start == end:
res.append((path, weight))
return [path]
if start not in self.adjacent:
return []
paths = []
for node in self.adjacent[start]:
if node not in path:
paths.extend(dfs(node, end, path, weight))
return paths
dfs(start, end)
return res
可能是内存错误。你真的需要跟踪所有的路径和他们的权重? –
@JaredGoguen是的,我需要跟踪所有路径及其权重,因为我的目标是查找GRAPH中START和END节点之间的所有路径。所以,如果这是内存错误,是否有可能解决这个问题?有任何想法吗? – Andrei
路径总数可能随着边缘数量的增加而有规模地增长。甚至50!太大而无法通过枚举来处理,不介意50000! –