首先声明本人仅仅学习过程,不想手写,于是乎在C站记录学习的心路历程,如果自己的分享能帮到别人那是最好不过了。学习参考链接都会在文末一一注明。
学习之前需要明白什么是加权图,什么是有向图。
①加权图
诸如此类图形,由顶点与边构成的为计算机中的图,图中边带上数值,则说明此边用数学数语为有权边,此类图为加权图。
②有向图
我们把计算机图形中,把边中加上方向箭头,则说明此类图为有向图。
了解完这些,我们开始学习Dijkstra算法。(本质求最短路径)
这里我们研究从0出来到4,求最短的路径。
其中把握两条查找规则:
(1)每次从未标记的节点中选择距离出发点最近的节点,标记,收录到最优路径的集合中。
(2)计算刚加入的节点A的邻近点节点B的距离(不包含标记的节点),若A的节点距离+从A到B距离的边长<节点B的距离,就更新节点B的距离和前面点;
此处如:0节点相邻的两个节点为1与7,然后如果最短路径经过2,则加权,4+8=12,然后如果从0节点经过1节点到7,算权重则出现4+11=15>8,(这里是大于0-7节点本身边的权重,则此处不更新节点)。
最初定义每个节点都是无穷权重,所以更新以后都是最小的。
更清楚的参考为:
第一步为把相邻的节点找出来,然后把字母节点换成数字节点。
S集合相当于上面所说的最优解结合,也就是上述所说标记的集合,我们在遍历查找的时候所标记的节点都放入最优解集合中,依次去查找。