一起talk C栗子吧(第五十三回:C语言实例--图的最短路径一)
2015-10-07 10:50
351 查看
各位看官们,大家好,上一回中咱们说的是图的最小生成树的例子,这一回咱们说的例子是:图的最短路径,闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,图的最短路径是一个通用的说法,它其实是表示图中任意两点之间的最小权值。这么说大家可能觉得比较抽象,我们通过例子来说明:假设有一个图,图中各个顶点之间的边上面有权值,该权值表示连接两个顶点的代价,我们想找到该图中某个顶点到另外一个顶点的路径,并且该路径中各个边上的权值之和最小,或者说路径的代价最小。满足这种条件的路径就是这两个顶点之间的最短路径。说到这里大家是不是觉得有点像我们在前面章回中说的最小生成树呢,其实,它们有相同之处,比如,它们求的都是权值之和的最小值。当然了,它们也有不同之处,比如,最小生成树中包含了图中所有的点,而最短路径中包含了两个或者两个以上的顶点。
求两点之间的最短路径,大家觉得比较最小生成树要简单一些,因为只需要考虑两个顶点就可以,其实不然。如果两点之间有边,而且该边上有权值,那么该边上的权值有可能是这两点之间的最小权值。大家注意了,我是说有可能,因为我们还可以通过其它点找到两点之间的最小权值。
这么说大家可能觉得比较抽象,我们举个例子来进行分析。例如下图中:E和F之间有一条权值为10的边,我们可以把10当作E和F两点之间的权值,但是10不是它们之间的最小权值,如果从E-C-F这个路径去计算它们之间的权值,那么E和F之间的权值为1+2=3,3才是它们之间的最小权值。当然了,这个例子比较简单,大家直接可以看出两点之间的最小权值。如果在顶点和边都比较多的图中,就不会这么容易了,那么如何去查找两点之间的最短路径呢?看官莫急,我们在后面的章回中会说明。
各位看官,关于最短路径的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。
看官们,图的最短路径是一个通用的说法,它其实是表示图中任意两点之间的最小权值。这么说大家可能觉得比较抽象,我们通过例子来说明:假设有一个图,图中各个顶点之间的边上面有权值,该权值表示连接两个顶点的代价,我们想找到该图中某个顶点到另外一个顶点的路径,并且该路径中各个边上的权值之和最小,或者说路径的代价最小。满足这种条件的路径就是这两个顶点之间的最短路径。说到这里大家是不是觉得有点像我们在前面章回中说的最小生成树呢,其实,它们有相同之处,比如,它们求的都是权值之和的最小值。当然了,它们也有不同之处,比如,最小生成树中包含了图中所有的点,而最短路径中包含了两个或者两个以上的顶点。
求两点之间的最短路径,大家觉得比较最小生成树要简单一些,因为只需要考虑两个顶点就可以,其实不然。如果两点之间有边,而且该边上有权值,那么该边上的权值有可能是这两点之间的最小权值。大家注意了,我是说有可能,因为我们还可以通过其它点找到两点之间的最小权值。
这么说大家可能觉得比较抽象,我们举个例子来进行分析。例如下图中:E和F之间有一条权值为10的边,我们可以把10当作E和F两点之间的权值,但是10不是它们之间的最小权值,如果从E-C-F这个路径去计算它们之间的权值,那么E和F之间的权值为1+2=3,3才是它们之间的最小权值。当然了,这个例子比较简单,大家直接可以看出两点之间的最小权值。如果在顶点和边都比较多的图中,就不会这么容易了,那么如何去查找两点之间的最短路径呢?看官莫急,我们在后面的章回中会说明。
各位看官,关于最短路径的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。
相关文章推荐
- 黑马程序员——OC语言加强---block的typedef
- 黑马程序员——OC语言加强---ARC使用特点及注意事项
- C++ map的基本操作和使用
- 【C++】递归求数组最短路径
- C++ operator关键字(重载操作符)
- 常用排序算法分析实现(C语言)
- char *a 和char a[] 的区别
- C++排序:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序
- 面试复习(C++)之归并排序
- C++实现链队列
- C++实现循环队列
- c/c++区别
- C++实现顺序栈
- C++实现链栈
- C++成员函数和构造函数
- 怎么样Eclipse IDE for C/C++ Developers正确编译GTK规划?(解决)
- C语言输入输出函数详解
- Leetcode NO.45 Jump Game II
- Leetcode NO.55 Jump Game
- Leetcode NO.278 First Bad Version