如何在所有点之间找到最短的连接?

时间:2013-01-13 18:04:46

标签: algorithm graph map path

有2d数组,上面标有点 - 就像在第一张图片中一样。我要做的是找到该地图上所有点之间的连接(这样你就可以从任何一点到达所有其他点)。所有边的长度之和必须可能是最小的。

enter image description here

输入:

(0, 0) (5, 5) (5, 1) (4, 4) (1, 5) (2, 4) (2, 1) // 1st,2nd,3rd city ...

输出:

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

1 个答案:

答案 0 :(得分:3)

将输入的点集视为完全连通的图形,将一对点之间的距离作为边缘权重。然后找到图的最小生成树。

Kruskal的算法特别容易:

  • 从输出图表中没有边缘开始。
  • 按重量顺序浏览输入图形的每个边缘,首先是最小的。
    • 如果两个顶点不是输出图中同一棵树的一部分,则将边添加到输出图中。

如果速度有问题,可以使用各种技术来快速实现这一目标。