一起talk C栗子吧(第五十四回:C语言实例--图的最短路径二)
来源:互联网 发布:梯形九九乘法表 java 编辑:程序博客网 时间:2024/05/16 15:06
各位看官们,大家好,上一回中咱们说的是最短路径的例子,这一回咱们继续说:图的最短路径,闲话休
提,言归正转。让我们一起talk C栗子吧!
看官们,我们在上一回中介绍了最短路径相关的概念,这一回中我们介绍如何使用迪杰斯特拉(Dijkstra)
算法去求顶点之间的最短路径。
迪杰斯特拉算法的基本思路:假设需要计算起点A和终点B之间的最短路径。首先计算出离起点距离近的顶
点与起点之间的最短距离,然后再计算出离起点距离远的顶点与起点之间的最短距离,如此反复,一直到
达终点为止。这里的远近关系可以这样去理解,如果两个顶点之间有直接的边,那么这两个顶点的距离就
比较近,反之,这两个顶点距离就比较远。
迪杰斯特拉算法的实现步骤:
- 1.选取图中任意一个顶点当作起点,对起点进行标记,表示它已经被访问过;
- 2.从图的邻接矩阵中读取与起点相连边的权值,并且存放到一个数组中;
- 3.在数组中找到权值最小的边,把该权值保存起来当作最短路径;
- 4.把步骤2中“权值最小的边”的另外一个顶点当作新的起点,对新起点进行标记,表示它已经被访问过;
- 5.查找是否可以通过新起点找到最短路径,如果有最短路径,那么更新存放最短路径的数组;
- 6.重复步骤3到步骤5,直到图中所有顶点都被查找完为止;
看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。关于该程序
我做以下的说明,方便大家理解:
- 1.程序中使用了一个数组来标记某个顶点是否被访问过,这样可以避免重复访问同一个顶点,从而避免计算出错误的最短路径。
- 2.程序中计算出了第一个顶点到其它顶点的的最短路径,如果想计算其它顶点之间的最短路径,只需要在程序中修改起点就能实现该目标。
- 3.程序中计算最短路径时,各个顶点的权值都是正数,如果有某个权值是负数,那么该算法就无能为力了。因此,在使用该算法时需要注意这点。
下面是程序的运行结果以及程序中使用的图。从程序运行结果中可以看到,顶点A到其它顶点的距离为A->B:3,
A->C:11依此类推,A->H:17.大家可以通过对比的方式查看程序运行结果和截图,这样可以更好地理解程序的
原理。
(程序中使用的图) (程序的运行结果)
各位看官,关于最短路径的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。
0 0
- 一起talk C栗子吧(第五十四回:C语言实例--图的最短路径二)
- 一起talk C栗子吧(第五十三回:C语言实例--图的最短路径一)
- 一起talk C栗子吧(第五十五回:C语言实例--图的最短路径三)
- 一起talk C栗子吧(第五十六回:C语言实例--图的最短路径四)
- 一起talk C栗子吧(第五十八回:C语言实例--获取程序当前的工作路径)
- 一起talk C栗子吧(第五十七回:C语言实例--main函数的参数)
- 一起talk C栗子吧(第三十四回:C语言实例--巧用溢出计算最值)
- 一起talk C栗子吧(第一百一十四回:C语言实例--线程同步之信号量二)
- 一起talk C栗子吧(第二十四回:C语言实例--顺序查找)
- 一起talk C栗子吧(第四十四回:C语言实例--深度优先遍历一)
- 一起talk C栗子吧(第六十四回:C语言实例--DIY字符串复制函数)
- 一起talk C栗子吧(第七十四回:C语言实例--DIY cd命令)
- 一起talk C栗子吧(第九十四回:C语言实例--SystemV IPC结构概述)
- 一起talk C栗子吧(第一百二十四回:C语言实例--内置宏)
- 一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值)
- 一起talk C栗子吧(第五十九回:C语言实例--字符串概述)
- 一起talk C栗子吧(第十七回:C语言实例--栈二)
- 一起talk C栗子吧(第二十三回:C语言实例--队列二)
- iOS9图片保存到相册
- Codeforces Round #324 (Div. 2) B. Kolya and Tanya
- 【Android】【6.0版本】Android 6.0 相关
- 深入Java集合学习系列:ConcurrentSkipListMap实现原理
- 【Python】Learn Python the hard way, ex11 raw_input
- 一起talk C栗子吧(第五十四回:C语言实例--图的最短路径二)
- mysql(二、查询)
- 【Tools】【版本控制】Repo
- 数据挖掘之基础概念
- 关于敏捷规划的微信对话
- 关于今年执行的减肥计划
- LeetCode Same Tree
- 黑马程序员——OC语言加强---Foundation框架介绍
- 欢迎使用Markdown编辑器写博客