繁体   English   中英

在有向无环图中查找两个节点之间的路径数

[英]Finding number of paths between two nodes in a directed acyclic graph

我解决这个问题的想法是调整 DFS 使其在我们到达目标节点时停止,然后设置一个计数器,将起始节点的所有邻居相加,然后递归地将起始节点的邻居及其邻居相加。

我只是想知道这是否只会计算从源到目标的路径,而不计算任何不通向目标节点的杂散路径。

感谢您的帮助。

您可以使用动态规划。 你有一个有向无环图,所以你有一个节点(比如 s),没有指向 s 的弧。 您还有一个节点(比如 t),它没有指向 t 的弧线。 因为它是非循环的,所以您可以使用拓扑排序算法来找到节点的排序,使得每个弧都远离 s 指向 t。

所以从s开始。 从 s 到 s 的路径数为 1,即空路径。 因为该图是无环的,所以 s 必须有一个邻居 u,这样唯一指向 u 的弧就是 su。 现在你只需重复一遍。 一般来说,对于一个节点 w,它的弧从 v1,...vk 指向它。 那么从 s 到 w 的路径数就是 sv1 路径数之和,..., svk 路径数。

这是在每个节点之间的单个弧的情况下。 如果有多个弧相乘,那么它将是(v1w 弧的数量)(sv1path 的数量)+ ... +(vkw 弧的数量)(svk 路径的数量)

并且在每个步骤中,您都可以使用它是非循环的这一事实来找到节点 w,这样您就已经计算了所有 sv1 到 svk 的路径。

我会使用 BFS。

我们称源节点为s ,目标节点为t

当您从s开始 BFS 时,将找到所有长度为 1 的路径并将其放入队列。 然后,您可以获取队列的第一个元素(称为u )并找到所有大小为 2 的路径( s -> u -> ... )。 对每个距离重复相同的事情,直到找到从st的所有长度的所有路径。

加速它的一个技巧是:在你用尽节点w所有路径后,存储从wt路径有多少条,当另一个节点(高于w )到达w ,你不需要重新计算所有路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM