Dijkstra算法
Dijkstra算法是求解有向图最短路径的经典算法,计算从一个指定的初始结点到其他各个结点最短路径。它的理论基础就是一条最短路径的子路径也一定是最短的。
实现如下:
- 将所有结点分为两个集合,一个命名为S集,一个命名为U集。S集中的点是我们已知其最短路径的点,U集中的点是我们还未知其最短路径的点。因此初始时刻,S集中只有一个我们选定的起始点,U集中是除了起始点意外的所有点;而最终时刻,S集中应该包含所有的点,U集为空集。
- 从最后加入S集的u点出发,选出到U集中最短的那个点nextVertex,将nextVertex点加入S集,并从U集中移除nextVertex点。
- 更新U集各点到起点的距离。如果从起点到u点再到U集中某点的距离比之前保存的距离小,就更新,否则不更新。
图例:用Dijkstra算法求解如下图的最短路径
感觉这是我看到的一个最好理解图。
附上实现代码:
#include<iostream>
#include<vector>
#include<stack>
using namespace std;
int map[][5] = { //邻接矩阵
{
0,10,INT_MAX,INT_MAX,