计算通过图表的路径数量

时间:2011-02-08 02:41:58

标签: algorithm graph

我正在查看从特定节点开始的图表中唯一 x 长度路径的数量。

但是我有一个限制,即在任何路径上都不会多次访问任何节点。


例如,请参考以下图表:
enter image description here

如果我追踪从5开始的3条长度路径的数量。

答案是9。

5 -> 2 -> 1 -> 3
5 -> 2 -> 4 -> 3
5 -> 2 -> 4 -> 7
5 -> 4 -> 2 -> 1
5 -> 4 -> 3 -> 1
5 -> 4 -> 7 -> 6
5 -> 6 -> 7 -> 4
5 -> 7 -> 4 -> 2
5 -> 7 -> 4 -> 3

注意我只与答案一致(9)而非特定路径


我尝试使用adjacency matrix来获取 x 的强大功能来提供路径数量,但我无法确定如何解释唯一的节点限制。

我也尝试使用depth-first search,但节点数量和 x 的大小使得这种做法变得不可行。


编辑:与BFS混淆的DFS(谢谢Nylon Smile& Nikita Rybak)。

2 个答案:

答案 0 :(得分:10)

这是NP-Hard。

从汉密尔顿路径减少。

给定一个哈密顿路径存在的图,我们需要检查......

为每个顶点运行算法,路径长度为n-1。任何非零回报都对应于哈密尔顿路径,反之亦然。

所以基本上,如果你找到一个多项式时间算法来解决你的问题,那么你有一个多项式时间算法来解决哈密顿路径问题,有效证明P = NP!

注意:这假设x是输入。

如果x是固定的(即与图中的顶点数无关),那么你有O(n ^ x)时间算法,它在P中,但对于中等大小的x来说仍然是不切实际的。

答案 1 :(得分:3)

这个问题是#P(解决方案的数量)中的计数问题,而不是NP中的决策问题(是或否)。

Moron的reduction仍然可以证明问题是#P-Complete,因为Hamilton Paths也是#P-complete。