通过php从mysql db计算两个“位置”之间的最短路径

时间:2010-07-12 06:02:06

标签: php mysql

我正在试图找出获得/显示多个位置之间最短距离的最佳方法。为了最好地解释这一点,将其视为地图并使用以下内容。每个位置的所有距离和路径都已放入mysql数据库中。

地点(信函 - >它可以到达的地点。[]中的距离/时间

A -> B [5]
A -> C [4]
B -> Z [1]
C -> Z [50]

所以A可以去B并花5分钟。虽然从A到C需要4分钟。

现在我想弄清楚的是让我们说有人说他们目前在位置A并希望到达Z.我怎样才能让系统通过数据库并确定A - > B - > Z是与A - >相比的最短路径。 C - > ž。

我原本打算在每个系统上进行循环,但这个设置将包含数百个不同的位置和路径。所以我已经可以看到它创建了无限循环,第二个它沿着一条路径返回起始位置。

也许这是不可能的哈哈。

非常感谢任何帮助或建议!

先谢谢!

1 个答案:

答案 0 :(得分:6)

Shortest Path Problem可以通过多种算法解决。 Dijkstra是经典之作:

  1. 为每个节点分配距离值。对于我们的初始节点将其设置为零,对于所有其他节点将其设置为无穷大。
  2. 将所有节点标记为未访问。将初始节点设置为当前节点。
  3. 对于当前节点,考虑其所有未访问的邻居并计算其临时距离(从初始节点开始)。例如,如果当前节点(A)的距离为6,并且将其与另一个节点(B)连接的边缘为2,则到B到A的距离将为6 + 2 = 8。如果此距离小于先前记录的距离(开头的无穷大,初始节点为零),则覆盖距离。
  4. 当我们考虑当前节点的所有邻居时,将其标记为已访问。将不再检查受访节点;现在记录的距离是最终的,最小的。
  5. 如果已访问所有节点,请完成。否则,将具有最小距离(从初始节点)的未访问节点设置为下一个“当前节点”,并从步骤3继续。