问题:给定一个带权有向图G=(V,E)。其中每条边的权是非负实数。另外还给定v中的一个顶点,称为源。现在要计算从源到所有其他各顶点的最短路长度。这里路的长度是指路上各边权之和。
举例:假设输入一个带权有向图的二维数组,输出单源最短路径的长度。
0 | 1 | 2 | 3 | 4 | 5 | |
---|---|---|---|---|---|---|
0 | ∞ | 4 | 6 | 6 | ∞ | ∞ |
1 | ∞ | ∞ | 1 | ∞ | 7 | ∞ |
2 | ∞ | ∞ | ∞ | ∞ | 6 | 4 |
3 | ∞ | ∞ | 2 | ∞ | ∞ | 5 |
4 | ∞ | ∞ | ∞ | ∞ | ∞ | ∞ |
5 | ∞ | ∞ | ∞ | ∞ | 1 | ∞ |
#include <iostream>
#include <cstdio>
#define MAX 1000000
using namespace std;
int arcs[10][10];//邻接矩阵
int D[10];//保存最短路径长度
int p[10][10];//路径
int final[10];//若final[i] = 1则说明 顶点vi已在集合S中
int n = 0;//顶点个数
int v0 = 0<