最短路径dijkstra算法:两顶点之间经过嘚边上权值之和最小的路径
Dijkstra算法:使用两个数组,数组P记录到对应顶点的前驱节点的下标数组D记录起点v0到各顶点的最小路径权值之和; 之后开始循环,从v0开始找到跟v0路径最短的顶点w1,找到与顶点w1相连的顶点更新这些顶点到v0的最短距离,;下一次的循环从w1开始,找到离w1距离最近的顶点w2找到与顶点w2相连的顶点,更新这些顶点到v0的最短距离……直到遍历完所有顶点
* 生成邻接矩阵(图) * 求有向网G的v0顶点到其余顶点v的最短路径dijkstra算法P[v]即带权长度D[v] * P[v]的值为前驱顶点下标,D[v]表示v0到v的最短路径dijkstra算法长度和 * @param P 存储最短路径dijkstra算法前驱节点下标的数组 * @param D 存储v0到各點最短路径dijkstra算法的权值和的数组 // 开始主循环每次求得v0到某个v顶点的最短路径dijkstra算法 // 寻找离v0最近的顶点 // final[w]为0表示该顶点还没有记录与它最近的頂点 // final[w]为0,并且该顶点的权值小于无穷 // 将目前找到的最接近v0的顶点的下标的位置置为1表示该顶点已被记录 // 修正当前最短路径dijkstra算法即距离 // 如果经过v顶点的路径比现在这条路径短的话 * @param P 存储最短路径dijkstra算法前驱节点下标的数组 * @param D 存储v0到各点最短路径dijkstra算法的权值和的数组 printf("存储最短路径dijkstra算法前驱结点下标的数组P的值为:\n"); 存储最短路径dijkstra算法前驱结点下标的数组P的值为: 当P[8] = 7时表示,顶点8的前驱结点是顶点7 找到顶点7,发现P[7] = 6表礻顶点7的前驱节点是顶点6, 所以由顶点8到顶点0的最短路径dijkstra算法为: 将这个顺序倒过来即可得到顶点0到顶点8的最短路径dijkstra算法 j = P[j]; // 获取与该顶点距離最近的顶点下标 // D数组中存v0到各顶点的最短路径dijkstra算法和 Patharc P; // 用于存储最短路径dijkstra算法前驱结点下标的数组 v0 = 0; // 将0下标的顶点设置为图的起点