有向加权图(DAG)最长路径问题
有向加权图最长路径问题是图论中一个重要的问题,可以通过动态规划的思想进行解决。
问题描述
给定一个有向加权无环图G,从G中找出无入度的顶点s,求从s出发到其他顶点的最长路径。
下文源代码运行结果参照此图
设计分析
首先,对于一般的图来说,求最长路径不像求最短路径那样简单,最长路径没有最优子结构。实际上,最长路径属于NP-hard问题。其次,图不能存在环路,如果图中存在有环路,我们可以很容易想到最长路径就变成无穷大了。因此,对于DAG来说,最长路径就存在解了。
如何利用动态规划解决该问题呢?
我们将上图进行一定的变形:
此时我们就可以清楚地看出最长路径。
设: d i l g ( V ) dilg(V) dilg(V)表示以点V结尾的最长路径:
d i l g ( V ) = m a x ( u , v ) ∈ E ( d i l g ( u ) + w ( u , v ) ) dilg(V)=max_{(u,v)\in E}(dilg(u)+w(u,v)) dilg(V)=max(u,v)∈E(dilg(u)