【发布时间】:2012-12-25 16:16:55
【问题描述】:
路径的“长度”是路径中的边数。
给定一个源顶点和一个目标顶点,我想找到路径数从源顶点到目标顶点给定长度 k。
我们可以随意访问每个顶点,所以如果从
a到b的路径是这样的:a -> c -> b -> c -> b,它被认为是有效的。这意味着可以有循环,我们可以多次经过目的地。两个顶点可以通过多条边连接。因此,如果顶点
a和顶点b由两条边连接,则路径a -> bvia edge 1 和a -> bvia edge 2 被认为是不同的。顶点数N
由于答案可能非常大,因此需要以某个数字为模进行报告。
这是我目前的想法:
我们可以使用 breadth-first-search 而不将任何顶点标记为已访问,在每次迭代中,我们都会跟踪该路径所需的边数 'n_e' 和 product 的'p'我们路径中每条边的重复边数。
如果n_e大于k,搜索应该终止,如果我们到达目的地n_e等于k,我们终止搜索并将p添加到out count of paths中。
我认为我们可以使用深度优先搜索而不是广度优先搜索,因为我们不需要最短路径,并且在广度优先搜索中使用的 Q 的大小可能还不够。
我正在考虑的第二种算法类似于Floyd Warshall's Algorithm 使用this 方法。只有我们不需要最短路径,所以我不确定这是否正确。
我的第一个算法遇到的问题是“K”可以达到 1000000000,这意味着我的搜索将一直运行到它有 10^9 条边并且 n_e 边数将在每个级别仅增加 1,这会很慢,我不确定它是否会因大量输入而终止。
所以我需要一种不同的方法来解决这个问题;任何帮助将不胜感激。
【问题讨论】:
-
所有边的权重都为 1 吗?
-
@DennisMeng 是的,它是一个未加权的图,我会在问题中添加它
标签: algorithm graph routes depth-first-search breadth-first-search