按高程对点进行排序。
为每个点的最长路径创建一个数组,并用零初始化它 - 这是指向该点的开始路径。
按照降序的顺序处理点。对于每个点,查找最长路径的长度,并使用它来调整到其较低邻居的最长路径。
每个点的最长路径在处理时都是正确的,因为它只能依赖于已经处理过的高点。
记住你看到的最高数字,这将是最长路径的长度。如果您记得它在哪里,那么您可以通过向后工作重建路径,重复找到具有最长路径的较高邻居。
总时间为O(N log N),由初始排序控制。