最短路径:任意A点到B点所经历的最短距离。
主要算法有:
Dijkstra算法(迪杰斯特拉算法),Floyd算法(弗洛伊德算法),A*算法等。
今天开始逐步介绍下他们的算法思想核心:
Dijkstra算法(迪杰斯特拉算法)
这个算法的思想我觉得和Prim算法相似,但是Prim算法是求最小生成树,求的一个图中连接所有点的最小权值,但是Dijkstra算法是求的图中任意两点的最短路径,所以二者在保存最小权值数据的方式不同,Prim主要获取的是邻接点的最小权值(两点必须是相邻的),Dijkstra获取的是点到点的最小权值(两个点可以不相邻,可以通过别的节点相连接,但是目的是点到点的最小权值),这样一想,是不是简单多了。
找出第一个最短距离的点:
继续找下一个最短距离的点:
就按照这种思想一直寻找下去,我们就会获得一个最短的权值数组,和一个前驱数组,通过前驱数组我们就知道了最短路径的路径轨迹,通过最短权值数组,我们就知道了最短路径。
迪杰斯特拉算法的时间复杂度是O(N^3)。