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,即找到

例:

posted @ 2025-06-05 20:39  hardestnut  阅读(37)  评论(0)    收藏  举报