我有一个算法在DAG中确定从每个顶点到特定顶点 t (out-degree等于0)的路径数。现在我选择其他特定的顶点 s ,其中0度。我必须开发另一种算法,为每条边(u,v)确定从 s <(u,v)开始的路径数量/ strong>在<(V | + | E |)中 t 。
我曾尝试修改BFS(因为使用DFS我认为无法达到解决方案)但是如果我有一个具有多个路径的边缘,则它不起作用。您能否建议我或者给我一个关于如何集中精力来获得解决方案的提示?
顺便说一下,问题与拓扑排序有关。
非常感谢! :)
答案 0 :(得分:1)
您已从previous question获得答案,以查找从所有顶点到目标节点t
的路径数。
因此,具体而言,使用此算法,您拥有从v
到t
的#paths。
使用此算法,您还可以找到从s
到u
的路径。
使用s
的{{1}}到t
的路径总数正好是(u,v)
<强>解释强>
从#paths(s,u) * #paths(v,t)
到s
的路径数是根据算法的正确性给出的。您只有一个选择前往u
,因此从v
到s
的路径数也是相同的数字。现在,您可以使用v
中的每一个继续v
到t
,总计#paths(v,t)
<强>复杂度:强>
该算法要求从节点a到节点b找到两倍数量的路径,每个路径都是#paths(s,u)*#paths(v,t)
,因此该算法的复杂性也是O(V+E)
附件:查找从所有顶点到目标节点O(V+E)
的#paths的算法:
t
原始问题中的证明和分析(链接)。