最短路径
Dijstra 算法
void shortestPath_DIJ(MGraph G, int v0, bool path[MaxVertexNum][MaxVertexNum], int pathlen[]) {
// ⽤ Dijstra 算法求有向⽹ G 的 v0 顶点到其余顶点 v 的最短路径
// 如果 path[v][w]为 true,则 w 是从 v0到 v 当前求得最短路径上的顶点
// pathlen[v]存储 v0 到 v 的最短路径⻓度
bool final[G.vexnum]; // final[v]为 true 表示 v0 到 v 的最短路径已经求得
for(int v=0; v<G.vexnum; ++v) {
// 初始化 final,path 和 pathlen 数组
final[v] = false;
pathlen[v] = G.Edge[v0][v];
for(int w=0; w<G.vexnum; ++w) path[v][w] = false;
if(pathlen[v] <INF) {
path[v][v0] = true; path[v][v] = true; }
}pathlen[v0] = 0;
final[v0] = true; // 将 v0加⼊顶点集合 S 开始主循环,每次求得 v0到某个 v 顶点的最短路径,并将 v 加⼊ S 集合
for(int i=1; i<G.vexnum; ++i) {
// 考虑剩下的 G.vexnum-1个顶点
int min = INF, v; // 当前所知不在 S 中离 v0 顶点的最近距离
for(int w=