·图论与动态规划

本文探讨了图论中的无环有向图的直径问题,包括如何找到最长直径,提出拓扑排序、循环松弛宽搜等方法,并讨论了无环图s->t的最长路长度的解决方案,涉及记忆化搜索与SPFA算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单图论问题探讨


找无环有向图的直径

重复插入:

  任取一条路径(长度为n),然后在n+1个插入点上扩展新的点进入路径。



找无环有向图的最长直径

无环图,

则一个点能够到达的点(子节点)不能够回到这个点(即没有环),

那么存在源点和终点,前者没有点能够到达它,后者不到达任何点。(不然这个图会无限的上下伸缩下去)。

可以有多个源头和终点,一个点可以对应多个父节点(乃至多个源),对应多个子节点(乃至多个终点)。

两种解法:

1 拓扑排序(特殊宽搜:把一个点的所有父节点都访问完以后,该点入度已经为0,再访问这个点) O(n)复杂度

  其中,DP求最长路径: maxLen(v) =  max { maxLen( father_of(v) ) } = maxLen(last_visited_father_of(v) ) 。

2 循环松弛宽搜 (spfa)

 while(!que.empty()){
       v=que.front(); 
       que.pop(), vis[v] = false; //visit v
       for u=son_of(v): 
           if(len[u]<len[v]+1){  //找到一个可以被更新的子节点
                le
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值