维护一共三个结构,
A:已经确定的最小生成树结点(acknownlege_points),(栈)
U:未知的图结点(unknown_points),
M:存已知生成树结点的距离、结点信息(record_min_distance)
初始化:
(1)把所有结点放入U集合中,A集合置空
(2)根据设置的起始点把起始点从U集合中放置入A集合中。
(3)将M中的距离设置为最大值,结点信息设为空。
输入的两点之间的距离矩阵是W.
循环直到终点在A集合中:
(1)以A栈顶的点为起始点,更新到U集合中所有点到起始点的最短距离,记录到M中。以A栈顶的点a,U集合中的点u为例,M_u = min(M_u, A_a + W_au)。
(2)找到更新后的U集合中,到起始点距离最短的点。将点从U集合移动到A集合。
附代码:
Dijkstra.h
#ifndef __DIJKSTRA_ZXY_H
#define __DIJKSTRA_ZXY_H
#include <vector>
#include <stdint.h>
#include <iostream>
#include <sstream>
struct DijkstraNodes {
float distance;
std::vector<size_t> nodes;
bool operator > (DijkstraNodes other) {
if (distance > other.distance)
return true;
else
return nodes.size() < other.nodes.size();
}
b