原点到图上任意点之间的最短路径

时间:2015-02-01 09:02:05

标签: algorithm shortest-path

我无法在很长一段时间内解决这个问题。假设我们有一个带有预定义根的2D平面,它始终位于(0,0)的原点。这个2D平面不会限制它的大小。

我们还要说,用户可以在此图上输入许多有限数量的点(并且每个点可以在此平面上任意位置)。这些点定义为S0,S1,... Sn,用户还可以给出这些点的X,Y坐标位置。

我想找到从根点到图上每个点的最短路径长度。

这是什么意思?:嗯,让我们说最短路径已被确定为6.这意味着从根点到点S0的路径长度是6,从根路径长度到S1为6,从根到Sn的路径长度为6.

我已经做了什么来解决这个问题:

查看我的图表: 免责声明:我的图表的目的是向您展示我的思维过程。它并不能代表我如何解决这个问题。 enter image description here

在我创建的这个示例中,假设所有点均匀分布。我试图做的是继续找到点之间的中点。例如,S0和S1之间的中点是A.S2和S3之间的中点是B.并且A和B之间的中点是C.根头向上到C,并且可以行进到图上任何点的相等距离​​。 在此示例中,图表上从根到ANY点的最短路径长度为4。换句话说,我希望从root到S0的最短路径相当于从root到S1的最短路径,这相当于从root到S2的最短路径,相当于最短的获取方式从root到S3

问题是这种方法不会一直有效,特别是当您有奇数个非随机点分散在平面上时。我无法找到算法。有没有人对我有任何指示/提示?

3 个答案:

答案 0 :(得分:1)

  

在此示例中,图表上从根到ANY点的最短路径长度为4。换句话说,我希望从root到S0的最短路径相当于从root到S1的最短路径,这相当于从root到S2的最短路径,相当于最短的获取方式从root到S3。

  

它们不需要是90度。

所以你真正说的是:

  

我想创建从每个用户输入的点开始并在根处以等距离结束的行。

从根找到最远点并计算距离(X)。对于与X的根距离相同的所有点,该直线是直线。对于所有其他点,创建一条任意曲线,其距离为X.

示例(线条与缩放距离并不完美,只是一个例子)。

equidistant lines

答案 1 :(得分:0)

我倾向于同意Erik Philips的观点,即从原点到最远点的连接应该是一条直线。如果多个点分享最远的荣誉,那么它们都会得到直线。对于任何剩余点,只需要连接到现有直线的位置即可。

将此技术应用于您的样本问题,从原点到每个点的距离为√10≈3.16

enter image description here

答案 2 :(得分:-1)

Here is the formula确定两点之间的距离。只计算所有用户给定点(s0,s1 ... sN)与根的距离,并从结果集中获取最小值。