当前位置: 首页 > 面试题库 >

有向树(igraph)中从一个节点到另一个节点的所有可能路径

通啸
2023-03-14
问题内容

我使用python绑定到igraph来表示有向树。我想找到从该图中一个节点到另一节点的所有可能路径。不幸的是,我在执行此任务的igraph中找不到现成的功能?

编辑

对无数路径的关注

我在说的图实际上是一个有根的有向无环图(DAG)。它表示事件的单向级联,可以在级联的各个级别上拆分或合并在一起。如我所说,这是一个单向图。还规定该图不包含任何循环。由于这两个原因,不可能有无限的路径列表。

我想做什么?

我的目标是找到从图的顶部(根)到给定节点的所有可能路径。


问题答案:

您正在寻找有向无环图(DAG)中一个节点与另一节点之间的所有路径。

树始终是DAG,但DAG并不总是树。区别在于,只要不引入任何循环,一棵树的分支就不允许连接,只能分开,而DAG的分支可以一起流动。

您可以find_all_paths()在“ Python模式-
实现图”中
找到您的解决方案。这需要一些修改才能与igraph一起使用。我没有安装igraph,但使用模拟程序似乎可行:

def adjlist_find_paths(a, n, m, path=[]):
  "Find paths from node index n to m using adjacency list a."
  path = path + [n]
  if n == m:
    return [path]
  paths = []
  for child in a[n]:
    if child not in path:
      child_paths = adjlist_find_paths(a, child, m, path)
      for child_path in child_paths:
        paths.append(child_path)
  return paths

def paths_from_to(graph, source, dest):
  "Find paths in graph from vertex source to vertex dest."
  a = graph.get_adjlist()
  n = source.index
  m = dest.index
  return adjlist_find_paths(a, n, m)

从文档中尚不清楚附加列表是顶点索引列表的列表还是顶点对象本身的列表。我假设列表包含索引以简化使用邻接表。结果,返回的路径取决于顶点索引。如果需要,则必须将它们映射回顶点对象,或者修改代码以附加顶点而不是其索引。



 类似资料:
  • 问题内容: 我正在一个项目中,用户对我们的代客服务的请求在另一端代客接受请求。 我正在使用Firebase作为后端,并应要求将客户uid保存在“ request”子项上。 当代客接受请求时,客户uid应从“请求”节点移至“进行中”节点。 我怎样才能做到这一点? 问题答案: 我建议使用这个: 这来自以下来源:https : //gist.github.com/katowulf/6099042。我在J

  • 构建哈夫曼树的步骤输入是唯一字符的数组及其出现频率,输出是哈夫曼树。 > 为每个唯一字符创建一个叶节点,并构建所有叶节点的最小堆(最小堆用作优先级队列。频率字段的值用于比较最小堆中的两个节点。最初,最不频繁的字符位于根) 从最小堆中以最小频率提取两个节点。 创建一个新的内部节点,其频率等于两个节点频率之和。将第一个提取的节点作为其左子节点,将另一个提取的节点作为其右子节点。将此节点添加到最小堆。

  • 我有一棵看起来像上面的树,由一个链接结构表示: 我的目标是找到从根节点到叶节点的所有路径。 我的树遍历算法如下所示: 当我运行它时,我确信树正在按图所示构建。我已经测试过了。然而,我无法找出我的树遍历分割错误的原因。 我得到的输出是: 我已经在高度较小的树上测试了它,它是有效的。但是出于某种原因,它不适用于高度大于2的树。我认为这是树出了问题,我检查并打印了每个父级、左子级和右子级,它们打印出来如

  • 我们得到了一个有序线程的二叉树。这意味着,如果一个节点没有左子节点(右子节点),左线程(右线程)将从该节点链接到其索引前一个节点(索引后一个节点)。 你能帮我找到一个节点的父节点的伪代码或算法吗?例如(见下图),给定的节点是Q,父节点必须是I。(我们应该利用给定的想法,即二进制是有序线程) TMI:我实际上需要这个伪代码/算法来创建另一个算法,它将获得二叉树的后序继承者。

  • 这是问题的链接:所有可能的完整二叉树。 给定一个整数,返回包含节点的所有可能的完整二叉树的列表。答案中每个树的每个节点都必须有。 答案的每个元素都是一个可能树的根节点。您可以按任意顺序返回最终的树列表。 完整的二叉树是一个二叉树,其中每个节点正好有或子节点。 例1: 输入: 输出: 在这个问题中,我必须返回所有可能的完整二叉树的列表,这是我的java代码的解决方案,有人能帮我在哪里我的代码是错误的

  • 我怎样才能找到一个有向图中的所有顶点,这样每一个顶点都可以从这个顶点到达呢?现在我只能“发明”O(v^3)ALGO--从每个顶点得到一个DFS/BFS,但我确信,有一个更快的方法来解决这个问题。 谢谢你!

  • 作为前言,我对JavaFX编程非常陌生。(我们上学期在我的一堂课上介绍了JavaFX,在过去的一个月左右的时间里,我一直在努力用JavaFX制作一个简单的游戏。 我遇到的一个问题是试图检测一个StackPane中的窗格与另一个StackPane中的窗格的冲突。具体来说,我在Game类中有一个“Player”节点(“Player”扩展了抽象的“Sprite ”,后者扩展了StackPane)以及一些