Dijkstra算法
来源:互联网 发布:宜兴淘宝照片拍摄 编辑:程序博客网 时间:2024/05/29 10:03
Dijkstra算法使用了贪心策略,解决了从某个源点到其余各顶点的最短路径问题,其时间复杂度为O(n^2).
typedef int Pathmatrix[MAXVEX]; //用于存储最短路径下标的数组typedef int ShortPathTable[MAXVEX]; //用于存储各点最短路径的权值和//Dijkstra算法,求有向网G的V0顶点到其余顶点V的最短路径P[V]及带权长度D[V]//P[V]的值为前驱顶点下标,D[V]表示V0到V的最短路径长度和void ShortestPtah_Dijkstra(MGraph G, int v0, Pathmatrix *P, ShortPathTable *D){ int v, w, k, min; int final[MAXVEX]; //final[w]=1表示已求得顶点v0到vw的最短路径 //初始化数据 for (v = 0; v < G.numVertexs; ++v) { final[v] = 0; //全部结点初始化为未求得最短路径状态 (*D)[v] = G.arc[v0][v]; //将于v0有连线的顶点加上权值 (*P)[v] = 0; //初始化路径数组P为0 } final[v0] = 1; //开始主循环,每次求得v0到某个顶点v的最短路径 for (v = 1; v < G.numVertexs; ++v) { min = INF; for (w = 0; w < G.numVertexs; ++w) { //寻找离v0最近的顶点 if (!final[w] && (*D)[w] < min) { k = w; min = (*D)[w]; } } final[k] = 1; //将目前找到的最近的顶点置为已找到最短距离的状态 for (w = 0; w < G.numVertexs; ++w) { //修正当前最短路径及距离 //如果经过v顶点的路径比现在这条路径的长度短的话 if (!final[w] && (min + G.arc[k][w] < (*D)[w])) { (*D)[w] = min + G.arc[k][w]; //修改当前路径长度 (*P)[w] = k; //表示v0到vw的最短路径中,vw顶点的前驱是vk } } }}
采用栈操作来输出最短路径点
Pathmatrix P; ShortPathTable D; int start = 0, end = 3; ShortestPtah_Dijkstra(G, start, &P, &D); cout <<"最小权值:"<< D[end] << endl; SqStack S; //建立空栈 S.top = -1; int p = end; while (p != start) { Push(&S, p); //从终点开始将最短路径上的点入栈 p = P[p]; } Push(&S, p); cout << "最短路径:"; while (S.top != -1) { cout<<S.data[S.top]<<' '; --S.top; } cout << endl;
0 0
- Dijkstra算法
- dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra 算法
- dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- dijkstra算法
- HttpClient发送文件与报文
- mysql慢查询的配置
- ButterKnife
- 实例讲解Nginx下的rewrite规则
- 测试
- Dijkstra算法
- 【Leetcode】Reverse String(easy)
- perftracker performance tool checking list
- 基于振动图像纹理特征识别 的滚动轴承故障程度诊断方法研究
- 验证篇(5.2)-02. FSSO 域认证单点登录 ❀ 飞塔 (Fortinet) 防火墙
- shiro结合cas实现单点登录
- Unity内置 Asset store下载文件夹的位置
- matlab中find函数的使用说明
- linux各种解压命令