用Dijkstra算法求最短路的方法

时间:2013-04-27 19:10:09

标签: c#

我必须对模拟进行编码,我需要一种方法来找到从一个位置到另一个位置的最短路径。该方法仅获得起始位置和最终位置,并返回表示位置之间最短道路的位置列表。 像这样:

public List<Tuple<int, int> ShortestRoad(Tuple<int,int> start, Tuple<int,int> end, int[,] park)
{//Code}

如何为此方法执行Dijkstra算法实现?

2 个答案:

答案 0 :(得分:7)

您应该查找A* search algorithm,这是一个广泛的首次搜索算法,具有启发式,以加快速度。

基本上A *算法是Dijkstra算法的广度优先搜索,但它使用启发式,或猜测最短路径是什么(你可以说,一个提示,告诉A *算法哪个节点更好看)。使用启发式算法可以使A *算法比Dijkstra算法快得多,因为它通常不会像Dijkstra算法那样关注那么多节点。

但是,需要注意的一点是,您的启发式功能(猜测两个节点之间的成本/距离)必须小于给定节点之间的实际成本。如果您的启发式函数产生较小的结果,则A *算法不一定会找到最佳/最短/最便宜的路径。

现在,如果你想要一些不错的动画(特别是关于A *和Dijkstra算法之间的差异),那么在维基百科上搜索两个动画,在两个动画之间的相同环境中执行相应算法的动画。从他们那里可以很容易地看出A *算法更好。

答案 1 :(得分:1)

看看Dijkstra的最短路径算法:http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm