我对迪杰斯特拉算法的理解

       Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,理解  Dijkstra(迪杰斯特拉)算法是很必要的,对以后的成长很有帮助,特左此文以作笔记,方便复习。 

  算法描述:

     基本思想:设G(u,v)是加权图,将G上的点分为两组,第一组为集合S(初始只有一个点,即源点,其他点陆续按路径由到长及相邻关系往里加入),第二组为其余未确定最短路径的顶点集合(用U表示,按最短路径长度的递增次序依次把第二组的顶点加入S中,,直到u为空,则算法结束)。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。

例子:



步骤                        集合S 集合u
             1                              算法开始,选入u0                                                  u1-u7        
            2 比较u0到u1-u7的距离,
u0->u1=2
u0->u2=1
u0->u3=8
u0->u4=00(00表示无穷,下同)
u0->u5=00
u0->u6=00
u0->u7=00
选入u2,S=(u0,u2),
路径:u0->u2
           u0
选择路径: u0->u2
u1,u3-u7
            3 比较u0,u0->u2到u1-u9的距离,
u0->u1=2
u0->u3=8
u0->u4=00
u0->u5=00
u0->u6=00
u0->u7=00

u0->u2->u3=8
u0->u2->u4=00
u0->u2->u5=00
u0->u2->u6=10
u0->u2->u7=00

选入u1,S=(u0,u1,u2),
路径:u0->u1
    u0->u2
            u0
选择路径: u0->u1
u3-u7
            4 比较u0、u0->u1、u0->u2到集合u的各点之间的距离,
u0->u3=8
u0->u4=00
u0->u5=00
u0->u6=00
u0->u7=00

u0->u1->u3=10
u0->u1->u4=3
u0->u1->u5=00
u0->u1->u6=00
u0->u1->u7=00


u0->u2->u3=8
u0->u2->u4=00
u0->u2->u5=00
u0->u2->u6=10
u0->u2->u7=00
选入u4,s=(u0,u1,u2,u4)
路径:u0->u1->u4
             u0->u1
            u0->u2
选择路径:u0->u1->u4
u5-u7、u3
            5 比较u0、u0->u1、u0->u2、u0->u1->u4到集合u的各点之间的距离,
u0->u1=2
u0->u3=8
u0->u4=00
u0->u5=00
u0->u6=00
u0->u7=00

u0->u1->u3=8
u0->u1->u5=00
u0->u1->u6=00
u0->u1->u7=00

u0->u1->u4->u5=6
u0->u1->u4->u6=00
u0->u1->u4->u7=12

u0->u2->u3=8
u0->u2->u4=00
u0->u2->u5=00
u0->u2->u6=11
u0->u2->u7=00
选入u5,s=(u0,u1,u2,u4,u5)
路径:u0->u1->u4->u5
            u0->u1->u4
            u0->u2
            u0->u1
           u0
选择路径:u0->u1->u4->u5
u6-u7、u3
            6 比较u0、u0->u1、u0->u2、u0->u1->u4、u0->u1->u4->u5到集合u的各点之间的距离,

u0->u3=8
u0->u6=00
u0->u7=00

u0->u1->u3=8
u0->u1->u5=00
u0->u1->u6=00
u0->u1->u7=00


u0->u1->u4->u6=00
u0->u1->u4->u7=12

u0->u1->u4->u5->u6=7
u0->u1->u4->u5->u7=9

u0->u2->u3=7
u0->u2->u6=9
u0->u2->u7=00
选入u6,s=(u0,u1,u2,u4,u5,u6)
路径:u0->u1->u4->u5->u6
            u0->u1->u4->u5
            u0->u1->u4
            u0->u2
选择路径:u0->u1->u4->u5->u6
u7、u3
           7 比较u0、u0->u1、u0->u2、u0->u1->u4、u0->u1->u4->u5、u0->u1->u4->u5->u6到集合u的各点之间的距离,
u0->u3=8
u0->u7=00

u0->u1->u3=8
u0->u1->u7=00

u0->u1->u4->u3=8
u0->u1->u4->u7=12

u0->u1->u4->u5->u3=7
u0->u1->u4->u5->u7=12

u0->u1->u4->u5->u6->u3=12
u0->u1->u4->u5->u6->u7=13

u0->u2->u3=7
u0->u2->u7=00
选入u3,s=(u0,u1,u2,u4,u5,u6,u3)
路径:
    u0->u1->u4->u5->u6
            u0->u1->u4->u5->u3
            u0->u1->u4->u5
            u0->u1->u4
            u0->u2->u3
            u0->u2
            u0
选择路径:  u0->u1->u4->u5->u3
                      u0->u2->u3
u7
            8  比较
u0->u1->u4->u5->u6、
u0->u1->u4->u5->u3、 
u0->u1->u4->u5、
u0->u1->u4
u0->u2->u3
u0->u2
u0到集合u的各点之间的距离,
u0->u7=00
u0->u2->u7=00
u0->u2->u3->u7=00
u0->u1->u4->u7=12
u0->u1->u4->u5->u7=12
u0->u1->u4->u5->u3->u7=00
u0->u1->u4->u5->u6->u7=13
选入u7,s=(u0,u1,u2,u4,u5,u6,u3 ,u7)
路径:
    u0->u1->u4->u5->u6->u7
            u0->u1->u4->u5->u3->u7
            u0->u1->u4->u5->u7
            u0->u1->u4->u7
            u0->u2->u3->u7
            u0->u2->u7
            u0->u7
            u0
选择路径:  u0->u1->u4->u7
                       u0->u1->u4->u5->u7
空(算法结束)

选出最短路径:u0->u1->u4->u7、u0->u1->u4->u5->u7


以上就是我理解的Dijkstra(迪杰斯特拉)算法的动态过程。(有错误之处,请指正)



你可能感兴趣的:(笔记)