随笔 - 147  文章 - 5  评论 - 6  阅读 - 81298

CLRS 22.4-2

求有向无环图中节点s到t的通路数标准答案是这样的

http://www.cppblog.com/7words/archive/2009/01/31/72736.html


演示图(标记为数字的完全是为方便DFS时候的顺序,假设同22.3-2)
(1)拓排,即可得类似P336,图22-7所示的从左到右的一个顺序关系,即上图下部分的样子
(2)DP一下
记P[v]为s到v的路径数,初始化为0
把P[p]设为1
P[v]=(u,v)belongs to EP[u]
也就是说等于所有拓扑序前面的与之相边的顶点的P[]之和
复杂度为:
拓排: O(V+E)
左到右扫一遍DP:V
所以为O(V+E)

即先拓扑排序,然后对得到的拓扑序列进行DP,DP公式是P[v]=所有p[指向v的上一节点]的和,即p[v]=p[2]+p[3],p[2]=p[1]+p[p],p[3]=p[4],像p[4,p[p]]这样的无上一节点的都设为1,那么p[v]=4

还有一种简单的方法,在BFS和DFS中我们都标记使每个节点只访问一次,这地方改变下,因为是有向无环图,不会陷入死循环,访问过的节点还可以访问,从p触发BFS或者DFS,每次只要访问到v节点count+1,最后count就是通路数

posted on   紫金树下  阅读(379)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2013年4月 >
31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 1 2 3 4
5 6 7 8 9 10 11

点击右上角即可分享
微信分享提示