有序图伪代码中的最长路径

Longest path in ordered graph pseudocode

我尝试创建一种算法来查找有序图中的最长路径。 有序图的属性是:

我的第一次尝试如下:

set w = v1 and L = 0
While there is edge that leaves from w
    Choose the edge (w, vj) with j as small as possible
    set w = vj and L = L + 1
return L

我不明白为什么这个算法在某些情况下是错误的。能举个例子吗?

我的直觉告诉我,只选择最小的 j 并不意味着在其他地方j 将继续是最小的。

假设您有一个图 1-> 31 -> 5,但是 3 -> 95 -> 7 -> 9,其中 9 是最后一个节点。您的算法将 1 -> 3 -> 91 -> 5 -> 7 -> 9.

事实上,我不认为你真的可以只 "pick" 一个分支并继续跟踪它到底并且在任何情况下都是正确的:你必须检查其他分支。

递归方法

这是一种使用简单递归算法的方法,在每个分支处计算路径的长度,然后在有多个分支的节点处计算最长的 return。

简单的伪代码示例(采用Python的风格)

class node:
    def longest_path(self):
        if len(self.children) == 0: # No children in this node
            return 1
        child_lengths = []
        for child in self.children:
            child_lengths.append(child.longest_path())
        return max(child_lengths) + 1