我有一個定向加權圖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! –