博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【图的最短路径】迪杰斯特拉算法求图的最短路径
阅读量:6274 次
发布时间:2019-06-22

本文共 910 字,大约阅读时间需要 3 分钟。

要求:求带权有向图中某一结点到其他结点的最短路径。

用迪杰斯特拉算法求解,迪杰斯特拉算法书上的描述如下:
对于图G=(V,{E}),将图中的顶点归为两组:
第一组S:已求出的最短路径的终点集合(开始为{v0})
第二组:V-S尚未求出的最短路径的顶点的集合(开始为V-{v0}的全部顶点)
该算法将最短路径长度的递增顺序逐个将第二组中的顶点加入到第一组中,直到所有的顶点都被加入到第一组顶点集S为止。
这是书上的描述,比较抽象,本人将自己的理解与大家分享如下:

思路:

 1首先初始化工作:三个准备数组path保存从v到i的路径,dist保存从v到i的最短路径,visit保存当前访问点是  已加入G中

 2 初始化:若dist不为INFINITY则将v加入到path[i]中,将visit置false,将dist置能直达的距离

 3然后将处顶点v外的其余n个顶点加入G中,所以应采用for循环n-1次,每次选取dist最小的顶点k加入G中

 4加入后得重新求dist,因为k加入后可作中转站供原本不能走通的路径走通,一旦第i个顶点的dist重新修改后, 得将顶点k加入到i的path路径中

基于以上步骤代码如下:
#include
using namespace std;const int INFINITY=23678;const int M=3;/*typedef struct G{int ver[M];int arc[M][M];int vernum,arcnum;}G;*/void path_(int n,int g[][M],int v)//为了简化过程,专注算法本质,将图的数据结构直接用数组加定点数来代替{int dist[M],path[M],visit[M];int k;//k用来保存每次选出的最小的路径的顶点的下标for(int i=0;i
程序运行结果如下:
注:x<--y表示从y到x的最短路径,上图输出的是给定数组g[M][N]中的每个顶点到顶点2的最短路径。

转载于:https://www.cnblogs.com/hainange/p/6334085.html

你可能感兴趣的文章
干货--手把手撸vue移动UI框架: 滑动删除
查看>>
CSS 系列之伪类与伪元素
查看>>
《算法导论》学习分享——摊还分析
查看>>
GO — 提供跨域请求代理服务
查看>>
【javascript 基础篇】prototype & constructor & instanceof
查看>>
AngularJs功能(八)--表单验证
查看>>
【源起Netty 外传】System.getPropert()详解
查看>>
LeetCode 300. Longest Increasing Subsequence
查看>>
Spring Boot快速入门(三):依赖注入
查看>>
ASUS Merlin固件开启JFFS教程
查看>>
JS面向对象之四 【new】 (创建特定对象的语法糖)
查看>>
使用 Nodejs 制作命令行工具
查看>>
Python调用C/C++方式
查看>>
JavaScript中的函数与arguments
查看>>
在vue-cli中组件通信
查看>>
翻译连载 | 附录 C:函数式编程函数库-《JavaScript轻量级函数式编程》 |《你不知道的JS》姊妹篇...
查看>>
【313天】跃迁之路——程序员高效学习方法论探索系列(实验阶段71-2017.12.15)...
查看>>
Linux和Ubuntu的区别与联系
查看>>
【译】Tree-shaking - webpack 2 和 Babel 6
查看>>
开源跨平台移动项目Ngui【Action动作系统】
查看>>