加权图算法

时间:2011-02-09 20:43:15

标签: algorithm graph

我有一个加权的有向图,其中多个边从相同节点的结尾开始。 防爆。 多个边沿从节点A到节点B。

获取某个节点的所有路径以及这些路径的相关成本的最佳搜索算法是什么?

4 个答案:

答案 0 :(得分:2)

由于你想要所有路径,我会使用简单的广度优先搜索。但是,我还建议您将所有平行边折叠为具有权重列表的单个边。

一旦获得所有不同的路径(即访问的节点的所有路径都不同),对于每个路径,您可以计算所有可能的替代并行路由。

所以,如果你有以下优势:

A -> C  (5)
A -> C  (3)
A -> B  (7)
B -> C  (1)
B -> C  (4)

第一步将其转换为:

A -> C (5,3)
A -> B (7)
B -> C (1,4)

此图表上的广度优先搜索将在A和B之间产生以下路径:

A -> B (7)
A -> C -> B (5,3) + (1,4)

因此,对于第二条路径,您将获得以下成本:

5 + 1 
5 + 4
3 + 1
3 + 4

这本身并不比在原始图表上执行BFS更快,但更简单的图表更容易处理。

答案 1 :(得分:0)

如果必须输出每个路径的成本,那么没有比普通DFS(或BFS)更好的了。由于问题是输出敏感的,并且您可能只有O(E + V)路径,因此无法在big-O表示法方面做得更好。

答案 2 :(得分:0)

如前所述,您可以使用深度优先搜索等进行强力/回溯

不要指望为此找到任何快捷方式 - 如果您的图表足够密集,可以有批次路径,甚至只找到其中​​有多少是#P-complete(即。:难以处理的。)

(如果您的问题不同 - 可能允许重复的节点,或者您只想找到最短的路径或类似的东西,那么可能是易于处理的解决方案)

答案 3 :(得分:0)

你是否允许骑自行车,也就是你从a - > b b-x-x - > a指向链接/路径?在这种情况下,你将获得无限的路径。