algorithm - 如何找到图中最长的简单路径?

标签 algorithm graph longest-path

我知道对于非定向图,这个问题是 NP 完全问题,因此我们应该使用蛮力来检查所有可能的路径。我们如何做到这一点?请提供一个伪代码并告诉我该算法的复杂性。

如果有优化,那就太棒了!

最佳答案

天真的方法可以遍历所有可能的顶点排列。

对于每个排列 {v1, ..., vN},您检查是否可以从 v1v2,然后从 v2v3 等。如果可以,将相应的边长添加到当前路径长度。如果不是,则转到下一个排列。

最长的路径就是您的答案。


或者,您可以使用递归做几乎相同的事情。

path = 0
bestPath = 0
used = new bool[N] // initialize with falses
for(u = 0; u < N; u++)
    Path(u); // build paths starting from u
print bestPath

在哪里

Path(u)
    used[u] = true
    foreach v in neighborhood(u)
        if(!used[v])
            path += distance(u, v)
            bestPath = max(bestPath, path)
            Path(v)
            path -= distance(u, v)
    used[u] = false

时间复杂度是可怕的 O(N * N^N)

关于algorithm - 如何找到图中最长的简单路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21880419/

相关文章:

algorithm - 在特定成本内找到路径

java - jgrapht库中有向无环图中的最长路径

c - 给定二维矩阵,找到最长的递减数字序列

javascript - 如何计算该问答流程的最短和最长路径?

algorithm - 查找一个数字的所有可能的非连续平方和

javascript - JavaScript 中多个数组的笛卡尔积

algorithm - 确定事件尚未发生时发生的可能性

algorithm - DPLL 算法如何工作?

algorithm - 三次图的动态递减连通性

javascript - 如何在具有相似性的节点之间创建边