有向无环图最长路径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)返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值