繁体   English   中英

在加权图中查找从节点 A 到 B 的所有路径,权重为 K 或更低

[英]Finding all paths in weighted graph from node A to B with weight of K or lower

我有一个有向图,有源和目标。 每条边的权重为 1。节点没有权重。 我需要找到一种有效的方法(我写在 C# 上,但我认为它不相关),找到从源到目标的所有路径,即路径的权重(或边数,即与那些细节相同)小于或等于某个值,我们称之为K。

我认为一种可能的方法是对从 1 到 K 的每个值运行 Dijkstra,但由于 K 可能非常大,因此效率不高。 我一直在寻找一些答案,但也有一个与我非常相似的问题,我没有发现这个答案有帮助。

在直接加权图中找到从节点 A 到节点 B 的所有简单路径,且权重之和小于某个值?

您可以简单地运行从源到目标的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM