[C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)
2020-12-13 15:38
标签:source c语言版 权重 顶点 str image cout 结构体 png Dijkstra 时间复杂度:O(n^3) [C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法) 标签:source c语言版 权重 顶点 str image cout 结构体 png 原文地址:https://www.cnblogs.com/johnnyzen/p/11613609.html1 Dijkstra算法
1.1 算法基本信息
1.2 算法描述
1.2 编程复现
# define MaxInt 32767 // 表示极大值 即 ∞ (无穷大)
# define MVNum 100 // 最大顶点数
typedef int VertexType; // 假设顶点的数据类型为整型
typedef int ArcType; // 假设Vi与Vj之边的权值类型为整型
typedef struct {
VertexType vexs[MVNum]; // 顶点表 (存储顶点信息)
ArcType arcs[MVNum][MVNum]; // 邻接矩阵
int vexnum,arcnum; // 图的当前顶点数与边数
}AMGraph; // Adjacent Matrix Graph 邻接矩阵图
bool S[MVNum]; // S[i] 记录从源点V0到终点Vi是否已被确定为最短路径长度 【划分确定与未确定: 跟贪心算法的适用范围(不可取消性)有直接联系】
// true:表已确定;false:表尚未确定
ArcType D[MVNum]; // D[i] 记录从源点V0到终点Vi的【当前】最短路径【长度】
int Path[MVNum]; // Path[i] 记录从源点V0到终点Vi的【当前】最短路径上【Vi的[直接前驱]的顶点序号】
void InitAMGraph(AMGraph &G){
cout>G.vexnum;
cout>G.arcnum;
for(int i=0;i
void ShortestPath_Dijkstra(AMGraph G, int V0){
//step1 n个顶点依次初始化
int n =G.vexnum;
for(int v=0;v
void OutputD(AMGraph G, int V0){
cout
int main(){
int V0; //源点V0的下标
AMGraph G;
InitAMGraph(G);
cout>V0;
ShortestPath_Dijkstra(G, V0);
OutputD(G, V0);
OutputPath(G, V0);
return 0;
}
Please Input Vertexs Number:6
Please Directed Edges Number:8
Please Input All Directed Edges and their Weight now:
Directed Edges(i,j,weight):
1 2 5
0 2 10
3 5 10
4 3 20
0 4 30
2 3 50
4 5 60
0 5 100
Please Input the Index of Source Node 'V0':0
Shortest Distance Weight of the Pair of Directed Vertices(0, j):
0 32767 10 50 30 60
Shortest Distance Path(0,j) of the Pair of Directed Vertices:
0 -1 0 4 0 3
2 参考文献
上一篇:用java实现“钉钉微应用,免登进入某H5系统首页“功能”
下一篇:spark模型error java.lang.IllegalArgumentException: Row length is 0
文章标题:[C++]单源最短路径:迪杰斯特拉(Dijkstra)算法(贪心算法)
文章链接:http://soscw.com/essay/35306.html