在我看来,dijkstra算法的关键主要有两点:1.找到可达距离最近的点2.更新可达距离。在算法中,我们会选定一个起点,并以起点所能达到的另一个简单初始化到各个点的距离数组:如果有可以到达的边,距离就是边的权重。如果节点之间并没有便可以直达,两点距离就是设定值MAX,点到自身的距离为0。随后我们可以由距离的比较得出下一个距离最短的节点。同时,因为有了新节点的加入,到各个点的最短距离发生变化(例如由1无法到达的3节点,通过新加入的2节点可以到达,distance就由MAX变为distance[1->2]+distance[2->3])此时依次把到各点的距离重新更新。循环往复,我们将依次找到的点连接起来就是最短路径。
此外,我还了解到了此算法的不同表现形式。比如说在堆优化的代码里用邻接表存储边的权值,而不用堆优化则用邻接矩阵存储。同时他们在更新distance时也有差异,堆优化使用优先队列取出最短距离,同时将更新的距离重新返回队列中,而不用堆优化则用choose函数选择最短边。
今天又是被算法大佬打击道心的一天,被bug折磨得不知天地为何物了