站酷网页设计分析,新闻聚合网站怎么做,台州建设企业网站,网站建设捌金手指专业7图片转载自#xff1a;最短路径算法-迪杰斯特拉(Dijkstra)算法 - 程序小哥爱读书的文章 - 知乎 https://zhuanlan.zhihu.com/p/346558578 迪杰斯特拉#xff0c;一个广度优先算法#xff0c;采用了贪心策略。 第一步#xff0c;选取顶点D#xff0c;更新和D相连的节点C最短路径算法-迪杰斯特拉(Dijkstra)算法 - 程序小哥爱读书的文章 - 知乎 https://zhuanlan.zhihu.com/p/346558578 迪杰斯特拉一个广度优先算法采用了贪心策略。 第一步选取顶点D更新和D相连的节点CE
第二步选取顶点C因为和D直接相连的就只有CD他俩之中必然有一个是最短的而且此时C到D的最短路径已经确定了为什么因为不可能存在另一个节点X能连接D和C了所以C是确定了的那么我们再以C来更新别的更新和C相连的发现能更新BFE不能更新从D到E的已经最短了。
第三步选出E为什么能确定E是最短的因为现在E的最短路径是从S集合里的每一个点更新而来的不可能存在一个点在D和E之间如果有早就被加到S中去了所以E一定是最短的。E可以加入S中并且以E来更新新的节点能更新F和G。这里我么发现D-C-F这条路径会被pass改成D-E-F这说明每次更新都是用已经确定了最短路径的元素来更新的当前的F其实已经被比了两次了
我们发现每次更新都是以这个已经确定了最短路径的点来更新更新完之后再在U里挑一个最短的节点u加入S为什么能确定此时u就是最短的并且不会再更新呢
u 到起点的最短路径只能通过集合 S中的节点因为在之前的步骤中所有在 S 中的节点已经被处理过它们的最短路径已经确定。由于 u 是当前距离起点最近的未处理节点意味着无论通过哪个已处理节点属于 S也不会有比当前路径更短的路径到达 u。因为都和F一样被比过了。如果有更短的路径到达 u那么该路径一定经过一个还未处理的节点x属于 U。但是这与选择 u 为当前最近的未处理节点相矛盾。因此不可能存在这样一条更短的路径。假如有x更短并且还在U中我们就不会选u)