给定一个图G,一个节点n和一个长度L,我想收集所有从n出发的长度L的(非循环)路径。
您对如何解决这个问题有任何想法吗?
到目前为止,我的图形是一个networkx.Graph实例,但是我并不在乎是否建议使用igraph。
非常感谢!
我只想介绍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的连续嵌套中的所有单链接路径后,只需乘以它们的乘积即可获得整个路径。这些数量为您提供了从节点开始的所需深度的路径数量。