目录
前言:
这个看了很多很多天了,每次看得昏昏欲睡脑袋晕晕乎乎就是看不明白。有些怀疑自己脑袋瓜是不是秀逗了。o(╥﹏╥)o,这是第六天了,我还是没看明白,本来打算看懂弄透了再写个博客巩固下,结果这个博客八成又变成了问题记录贴。
好吧,开始吧。
迪杰斯特拉算法的定义:
Dijkstra算法用来解决单源最短路问题,即给定图G和起点s,通过算法得到S到达其他每个顶点的最短距离。Dijkstra的基本思想是对图G(V,E)设置集合S,存放已被访问的顶点,然后每次从集合V-S中选择与起点s的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令顶点u为中介点,优化起点s与所有从u能到达的顶点v之间的最短距离。这样的操作执行n次(n为顶点个数),直到集合S已包含所有顶点。
上面这一堆话表示我第一次看的时候压根没看明白,图什么的全忘光了。
去啃了下算法笔记,大概意思是:
用邻接矩阵的方法来理解:
初始化:
你需要定义一个二维数组G[MAX_V][MAX_V]来表示一个图,数组的值是边权(路径长度)。
此外设置一个bool型的数组Vis[MAX_V]来表示定义中集合S的一个访问属性,即这个bool型的数组Vis表示该点有没有被访问过,因为这个集合S抽象化后这样表示比较符合。
接着定义一个数组d[MAX_V]表示最短距离,即存储到对应下标最短距离的数组。对应定义中的集合V-S。
定义中的操作:
①每次从集合V-S中选择与起点s的最短距离最小的一个顶点(记为u),访问并加入集合S:
即d[MAX_V]数组中存放的是下标对应的顶点距起始点s的最短距离,这个集合开始被初始化为全0