有向无环图最长路径java_拓扑排序-有向无环图中的最长路径

原标题:拓扑排序-有向无环图中的最长路径

给定一个加权d irected (DAG)和一个源点s在它,找到从s中最长的距离在给定图中的所有其他顶点。

一般图的最长路径问题并不像最短路径问题那么容易,因为最长路径问题没有最优的子结构属性。实际上,最长路径问题是一般图的NP-Hard。然而,最长路径问题对于有向无环图具有线性时间解。该想法类似于有向无环图中最短路径的线性时间解。,我们使用拓扑排序。

我们将到所有顶点的距离初始化为负无穷,距离源的距离初始化为0,然后我们找到图的拓扑排序。拓扑图的排序表示图的线性排序(见下图,图(b)是图(a)的线性表示)。一旦我们有拓扑顺序(或线性表示),我们逐个处理拓扑顺序中的所有顶点。对于每个正在处理的顶点,我们使用当前顶点的距离更新其相邻的距离。

下图显示了寻找最长路径的逐步过程。

以下是找到最长距离的完整算法。

1)初始化dist [] = {NINF,NINF,...}和dist [s] = 0,其中s是源顶点。这里NINF意味着负无限。

2)创建所有顶点的拓扑顺序。

3)按拓扑顺序对每个顶点u进行跟踪。

............跟随你的每个相邻顶点v

.................. if(dist [v]

........................... dist [ v] = dist [u] +重量(u,v)返回搜狐,查看更多

责任编辑:

你可能感兴趣的:(有向无环图最长路径java)