我必须编写一个模拟程序,我需要一种方法来找到从一个位置到另一个位置的最短路。此方法仅获取起始位置和最终位置,并返回代表位置之间最短路段的位置列表。 事情是这样的:用Dijkstra算法寻找最短路的方法
public List<Tuple<int, int> ShortestRoad(Tuple<int,int> start, Tuple<int,int> end, int[,] park)
{//Code}
我怎样才能做到这方法的Dijkstra算法的实现?
我必须编写一个模拟程序,我需要一种方法来找到从一个位置到另一个位置的最短路。此方法仅获取起始位置和最终位置,并返回代表位置之间最短路段的位置列表。 事情是这样的:用Dijkstra算法寻找最短路的方法
public List<Tuple<int, int> ShortestRoad(Tuple<int,int> start, Tuple<int,int> end, int[,] park)
{//Code}
我怎样才能做到这方法的Dijkstra算法的实现?
你应该查找A* search algorithm,这是一个广度优先搜索算法与启发式使其更快。
本质上,A *算法是什么广度优先搜索像Dijkstra算法,但它使用启发式,或约最短路径是什么猜测(一个提示,你可以说,告诉A *算法哪些节点更好看)。使用启发式算法可以使A *算法比Dijkstra算法快得多,因为通常它不会像Dijkstra算法那样查看接近那么多的节点。
不过,有一点需要注意的是,你的启发式功能(在两个节点之间的成本/距离的猜测)决不小于给定的节点之间的实际成本。如果启发式函数产生的结果较小,那么A *算法不一定会找到最佳/最短/成本最低的路径。
现在,如果你想要一些很好的动画(特别是关于A *和Dijkstra算法之间的差异),那么在维基百科上进行搜索,在相应环境中执行相应算法的动画动画。从他们那里很容易知道,A *算法更好。
看看Dijkstra的最短路径算法:http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
你的问题是非常模糊的,请更具体。你有什么道路数据?你有什么尝试?码?你有没有看过a *算法? – 2013-04-27 19:14:36
我有一个二维整数数组。是类属性,因此该方法可以使用它。我刚刚开始编写代码...启发式算法对我来说太高级了! – abea 2013-04-27 19:30:30
不清楚你问的是什么 - BFS是一个解决方案。有很多方法可以加快搜索速度(如答案中提到的A *),但看起来您还需要其他的东西。你是否在寻找更简单的蛮力BFS? – 2013-04-27 19:39:49