从完整图表计算最短路径

时间:2012-12-07 10:46:19

标签: c graph brute-force backtracking

我有一个矩阵NxN,其中matrice[i][j]是非定向图中顶点if j之间边缘的代价。

我需要确定的是包含所有内容的最短路径 matrice中的顶点。

因此输入如下:

0 198 67 368
198 0 131 432
67 131 0 301
368 432 301 0

我需要尝试所有可行的路径,在这种情况下:

0-->1-->2-->3-->0

是正确的,它的长度为998。

我该如何实现?

1 个答案:

答案 0 :(得分:3)

您正在描述广泛研究的Traveling Salesman Problem

虽然有很多方法可以近似解决方案 - 确切的解决方案确实需要指数运行时间,而蛮力是解决它的一种选择(在O (n!)中)。

这个想法是生成所有可能的排列并评估每个排列 - 并找到最小的排列。 例如,This question讨论了如何生成所有排列。同样的想法适用于您的问题。

可以进行一些可能的优化,例如branch & bound技术 - 或使用智能DP解决方案。