![](/img/trans.png)
[英]Algorithm for finding distinct paths from A to B in weighted, directed, cyclic graph
[英]Finding all paths in weighted graph from node A to B with weight of K or lower
我有一個有向圖,有源和目標。 每條邊的權重為 1。節點沒有權重。 我需要找到一種有效的方法(我寫在 C# 上,但我認為它不相關),找到從源到目標的所有路徑,即路徑的權重(或邊數,即與那些細節相同)小於或等於某個值,我們稱之為K。
我認為一種可能的方法是對從 1 到 K 的每個值運行 Dijkstra,但由於 K 可能非常大,因此效率不高。 我一直在尋找一些答案,但也有一個與我非常相似的問題,我沒有發現這個答案有幫助。
您可以簡單地運行從源到目標的 DFS 來分析所有路徑。 如果您必須找到在到達深度 K 時停止的路徑數,返回 0,到達目標時返回 1,如果您還需要描述路徑,則可以在使用 DFS 探索時構建一棵樹。 復雜度將為 O(E),其中 E 是邊數
這里是 python 和偽代碼的混合:
def DFS(node, depth, target, visited, graph, max_depth):
visited.add(node)
if depth >= max_depth:
return Null
elif node == target:
return new_tree_node(node)
else:
sub_trees = list()
for connected_node in graph[node]:
if connected_node not in visited:
sub_tree = DFS(connected_node, depth+1, target, visited, graph, max_depth)
if sub_tree != Null:
sub_trees.append(sub_tree)
if length(sub_trees) > 0:
tree_node = new_tree_node(node)
for sub_tree in sub_trees:
tree_node.add_child(sub_tree)
return tree_node
else:
return Null
tree = DFS(source, 0, target, set(), graph, K)
PS:這個解決方案也可以很容易地適應加權圖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.