迪杰斯特拉算法
- 要求图中所有边的权重非负,基于贪心算法,时间复杂度为O(n^2);
- 具体实现:
dist数组存放由起点到各顶点的最短路径长度(初始为正无穷)
parentPath数组存放到各顶点当前路径中前一个结点的下标(初始为-1)
set数组存放已经确定最短路径的顶点集合
void Dijkstra(const V& src, vector<W>& dist, vector<int>& parentPath){
size_t n = _vertex.size();
dist.resize(n, MAX_W);
parentPath.resize(n, -1);
int srci = getVertexIndex(src);
dist[srci] = 0;
parentPath[srci] = srci; //起点并不一定是第一个顶点
vector<bool> set(n, false