![](/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.