如何计算最短路线?

时间:2011-12-11 23:56:01

标签: c# php gps coordinates great-circle

我列出了80个城镇,每个城镇都有自己的地理经纬度。我需要找到最短的封闭路线(考虑到地球的曲率)。我想我可以计算每一个之间的距离(使用大圆距离公式),然后列出距离最短的那个(这将是6400次计算)。问题是我没有太多的编程经验,但我知道一点C#和PHP。有人能指出我应该学习什么来解决这个问题的正确方向(例如,我应该学习更多关于php和mysql使用数据库或其他东西来解决距离吗?)

4 个答案:

答案 0 :(得分:4)

这个问题被称为Travelling salesman problem,并且NP很难 - 确定性地解决它并获得最佳路线,你只能使用蛮力,作为替代方案你可以使用启发式,大多数时候产生一个伟大的结果,但可能是次优的。

答案 1 :(得分:4)

“寻找最短路径”问题让我想到了dijkstra或A *算法。如果你已经计算了所有这些距离,A *应该是找到两个位置之间最短路径的一种很好的方法。

答案 2 :(得分:1)

There are a number of ways to work out distances given lat/long。我认为你不需要太多的编程经验来实现它。

修改

如果城市的数量是静态的80,你知道如何计算城市之间的距离,那么一个简单的选择是将这些信息存储在数据库中;结构如:

--City
CityId
CityName
Latitude
Longitude

--CityCityDistance
StartCityId
FinishCityId
RouteDistance

你的CityCityDistance表只有几千行(如果我记得数学是如何工作的)然后如果你需要知道最接近另一个城市的城市,那么sql就像(在t-sql中):

select top 1 ccd.FinishCityId, c.CityName 
from CityCityDistance ccd
join City c on ccd.StartCityId = c.CityId
where ccd.RouteDistance = (select min(RouteDistance) from CityCityDistance where StartCityId = <chosen city id> )

答案 3 :(得分:1)

Dijkstras算法最适合这个问题而且复杂性较低.TSP需要非常努力工作,80个城市的树木规模很大(对于这个没有城市来说这是不切实际的,因为n个城市有n个可能性。)我建议首先绘制城市图并找出可能的路线然后应用Dijkstras.A *算法是最好的,但初学者很难实现像这里的问题。