dijkstra算法
dijkstra算法用于求赋权图(边有长度)中某个点到其他所有点的通路长度的最小值


我们假设求v1到其他所有点的通路长最小值。
对于每个点vi而言(i=2,3,4....n),1.每个点一定有一个标记,要么为P,要么为T,P表示已找到v1到该点的最短路径,T表示v1到该点的最短路径还在不断优化中。2.每个点有一个d(vi),表示目前找到的到v1的路径最小值
初始化:1.v1的标记为P,d(v1)=0。2.v
i的标记都为T,如果vi和v1是连通的,那么d(vi)=w(v1,vi)(v1vi的直接路径长度),如果vi和v1不连通,那么d(vi)=∞
算法:
1.在当前T标记的点中,找具有最小的d值的点vk,将其标记变为P(能成为最小的d值的T点,旁边一定打通了一个P点vj!!(vk点只有和v1连通且d(vk)最小,或者和刚被打通为p的vj相邻,在算法2步中,给d(vk)赋新值后d(vk)最小两种情况),相邻的P点vj的最小路径是确定了的,再加上这个T点vk本身到P点vj的d也是最小的,那么这个点的最小路径就找到啦)
2.给和vk相邻的T点vi赋新值,如上图
T=min{d(vi),d(vk)+w(vk,vi)}
你vk打通的新路到我这儿更短我就更新,不然我还是用我的老距离vi
循环1,2步,直到全部点都被标记为P,即找到
例:


浙公网安备 33010602011771号