算法用处与基本思想
Dijkstra算法的作用是求指定点到图中任何一点的最短路径。
其基本思路与BFS(深度优先搜索)有些类似,但不同的是BFS用的是一般队列,也就是严格的先进先出。而Dijkstra算法用到的则是优先队列。
什么是优先队列
优先队列中是有序的队列,其顺序取决于规定的规则。比如可以规定值大的在前面,也可以规定值小的在前面。一般来说直接用STL里面的priority_queue来实现,这个默认的是较大的值在前面。
算法过程
有一个保存到每个点最短路径的数组,这里记为shortlen[](默认值为无穷,代表无通路)。还有一个记录点是否被访问过的数组,这里记为visit[]。
一开始,从起点开始,用每一个与起点相连的且没有被访问过的点的距离对shortlen数组进行更新,例如:第i个点与起始点的距离为x,x小于无穷,那么久把shortlen[i]的值更新为x。
只要有通路的点,全部放入优先队列然后把这个点记为被访问过。
然后就从队列里取出队头,将其当做新的起点,重新进行上面的操作。
当队列为空时跳出循环,这个时候的shortlen数组的值就是起点到各个点的最短距离。
代码:
#include<iostream>
#include<cstring>
<