小编典典

使用python从节点n开始的所有长度为L的路径

python

给定一个图G,一个节点n和一个长度L,我想收集所有从n出发的长度L的(非循环)路径。

您对如何解决这个问题有任何想法吗?

到目前为止,我的图形是一个networkx.Graph实例,但是我并不在乎是否建议使用igraph。

非常感谢!


阅读 141

收藏
2021-01-16

共1个答案

小编典典

我只想介绍Lance Helsten的出色答案:

深度限制搜索将搜索特定深度(称为长度L)内的特定节点,并在找到它时停止搜索。如果您在他的答案中查看Wiki链接中的伪代码,您将会理解:

DLS(node, goal, depth) {
  if ( depth >= 0 ) {
    if ( node == goal )
      return node

    for each child in expand(node)
      DLS(child, goal, depth-1)
  }
}

但是,对于您而言,从节点寻找长度为L的所有路径时,您将不会在任何地方停下来。因此,伪代码必须修改为:

DLS(node, depth) {
    for each child in expand(node) {
      record paths as [node, child]
      DLS(child, depth-1)
    }
}

在记录了DLS的连续嵌套中的所有单链接路径后,只需乘以它们的乘积即可获得整个路径。这些数量为您提供了从节点开始的所需深度的路径数量。

2021-01-16