最短路经计算分静态最短路计算和动态最短路计算。
静态路径最短路径算法是外界环境不变,计算最短路径。主要有Dijkstra算法,A*(A Star)算法。动态路径最短路是外界环境不断发生变化,即不能计算预测的情况下计算最短路。如在游戏中敌人或障碍物不断移动的情况下。典型的有D*算法。
Dijkstra算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。,能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。用在大网络中,对节点数目和具体连接不了解时候使用。
A*算法 保证找到最短路径(最优解的)条件的关键在于估价函数h(n)的选取。如对于几何路网来说,可以取两节点间欧几理德距离(直线距离)做为估价值,能保证最短路的搜索向终点的方向进行。明显优于Dijstra算法的毫无无方向的向四周搜索。不适于在动态路网,环境如权重等不断变化的动态环境下。
A*算法和Dijistra算法的区别在于有无估价值,Dijistra算法相当于A*算法中估价值为0的情况。
D*算法,动态路网,最短路径,主要用于机器人探路,美国火星探测器核心的寻路算法就是采用的D*(D Star)算法。向目标点移动中,只检查最短路径上下一节点或临近节点的变化情况。
而flody算法,是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。适用于总体把握,再对各连接具体路径进行修正。
你可以看需要的情况来选择,如果没特别要求你可以从flody入手。