算法思路
1、首先选择一个起始点(我们称为源点)
2、从源点出发,采用贪心策略,选取连接源点并且权值(cost)最小的点
3、将源点更新为选择的点
4、重复2、3步,直到到达的节点数为终节点数
5、闭合回路,更新路径(path)和开销(cost)
6、将每个节点都做为起始点重复上述步骤,选取cost最小的一条路径
数据结构
Node结构体记录节点信息:
1 | struct Node{ |
二维数组记录节点信息
1 | G[i][j]:表示由i节点到j节点的权重 |
一维数组记录路径
1 | minpath[n+1]:由于路径是回路,所以记录的节点为n+1个 |
算法实现(c++)
1 | /** |
时间复杂度
寻找一个节点的最短路径为$T1 = O(n^2)$,遍历$n$个节点,所以需要$T2 = O(n)$,总时间为: