在给定起始顶点和深度限制的循环定向图中寻找所有可能的路径。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在给定起始顶点和深度限制的循环定向图中寻找所有可能的路径。相关的知识,希望对你有一定的参考价值。

考虑下面给出的有向循环图,如果指定一个起点(例如:顶点0和允许的最大深度(例如:5),可以用什么算法来寻找所有可能的路径(注意:给定的顶点可以多次访问)?

enter image description here

如果指定一个起点(例如:顶点0)和一个允许的最大深度(例如:5),那么可以用什么算法来找到所有可能的路径(注意:一个给定的顶点可以被访问一次以上)?

实现这个图问题的最有效算法是什么?

下面给出了上述图的一些可能的路径,顺序不限(从顶点0开始,最大允许深度为5)。

  • 0 -> 1 -> 2 -> 4 -> 1 -> 3
  • 0 -> 1 -> 2 -> 4 -> 5 -> 1
  • 0->1->2->4->5->6。
  • 0 -> 1 -> 3 -> 5 -> 1 -> 3
答案

伪算法,这将是一个增强的BFS,它一直跟踪它所经过的路径。当它达到要求的深度时,它就会记录路径,然后终止。

类似这样(node.js风格的语法)。

const requiredDepth = X
const relevantPaths = {}

const runBFS = (curNode, curPath = []) => {
    if (crPath.length === requiredDepth) {
        relevantPaths.push(curPath)
        return
    }

    for (let neighbor of curNode.neighbors) {
        const newPath = [ ...curPath, getEdge(curNode, neighbor) ]
        runBFS(neighbor, newPath)
    }
}

runBFS(root)

希望能帮到你

以上是关于在给定起始顶点和深度限制的循环定向图中寻找所有可能的路径。的主要内容,如果未能解决你的问题,请参考以下文章

深度优先

20162312图的深度优先遍历补分博客

深度优先搜索广度优先搜索

深度优先搜索(DFS)和广度优先搜索(BFS)

常用的图算法:深度优先(DFS)

DFS&BFS