单源最短路径 :Dijkstra 算法

Dijkstra 算法用于解决有向图的最短路径问题。算法描述如下:
1. 初始化原点的距离为0,到其他任意点到原点的距离为无穷大。
2. 初始化已访问节点集合为空,未访问节点集合为所有节点。
3. 在未访问节点集合中找到一个到已访问节点集合距离最近的节点(第一次找到的节点为原点),将该节点加入已访问节点。
4. 更新该节点的邻居节点中处于未访问状态的节点的距离。
5. 重复第三步。直到所有节点都已经访问。

下面是一个最基本的Dijkstra 算法的c++实现,有向图存储采用的是邻接矩阵。const int MAXN = 1001; const int INF = 0x7FFFFFFF; int matrix[MAXN][MAXN]; int dis[MANX] = {INF}; bool visit[MAXN] = {false} void dijkstra(int src, int des, int N) { int n = N; // N为节点总数 int i, min, mdis = INF; dis[src] = 0; // 第一步 while (n) { mdis = INF; for (i = 1; i <= N; i++) // 第三步 if (visit[i] == false && dis[i] < mdis) min = i, mdis = dis[i]; visit[min] = true, n--; for (i = 1; i <= N; i++) // 第四步 if (matrix[min][i] < INF && visit[i] == false && dis[min] + matrix[min][i] < dis[i]) dis[i] = dis[min] + matrix[min][i]; } printf("%d/n", dis[des]); // 打印结果 }

你可能感兴趣的:(单源最短路径 :Dijkstra 算法)