Dijkstra 计算两地间的最短距离

        这里使用Dijkstra(戴克斯特拉)算法,该算法起始点实际计算出到任一点的距离,计算两城市间的距离实际是一个副产物,所有一下图为例来说明,该图为无向图,顶点间所标数字即为两点之间的距离。

 

问题:求点D到点A的距离。

 初始状态:

                                     

              集合S中 D(0):D到D的距离为0;

              集合U中 A():D不能直接到达A;B() :D不能直接到达B;C(3):D直接到达C的距离为3;E(4):D直接到达E的距离为4;F():D不能直接到达F;G():D不能直接到达G。

 

第1步:由初始条件可以看出U集合中C到D的距离最小,故将C添加到集合S中,更新后,两集合关系如下:

                                   

         DC的最小距离为:3,D到C的路线为:

                                                       

第2步:逐个判断集合S中元素到集合U中的距离,并将距离最小的点添加到集合S中

                  对A点 :

                                      

                 对B点:

                                       

                对E点:

                                       

                对F点:

                                       

                对G点:

                                       

 由上可以看出  距离最小为4,将E添加到集合S中,更新后的集合如下:

                                  

  更新后,DE的最短距离:4DE的最短路线为:

                              

 

第3步,逐个判断集合S中元素到集合U中的距离,并将距离最小的点添加到集合S中

               对A点:

                                 

              对B点:

                                 

              对F点:

                                 

              对G点:

                                 

     由上可以看出,距离最小为6,故将F点加入到S集合中,更新后S和U分别为

                                  

     跟新后,D到F的最短距离为:6,最短路线为:

                                        

 

第4步:逐个判断集合S中元素到集合U中的距离,并将距离最小的点添加到集合S中

             对A点:

                             

            对B点:

                             

             对G点:

                            

  由上可以看出,距离最小为12,故将G点加入到S集合中,更新后S和U分别为

                                

  更新后,D到G的距离最短:12,最短路线:

                           

第5步:逐个判断集合S中元素到集合U中的距离,并将距离最小的点添加到集合S中

          对A点:

                             

         对B点:

                          

由上可以看出,距离最小为13,故将G点加入到S集合中,更新后S和U分别为

                                  

更新后,DB的最短路线为:13DB最短路线为

                   或

 

第6步:逐个判断集合S中元素到集合U中的距离,并将距离最小的点添加到集合S中

          对A点(D到B的最短路线有2条,我们可以任选一条,这里选D→C→B)

                                 

           由上可以看出, 距离最小为22,故将G点加入到S集合中,更新后S和U分别为

                               

           更新后,DA的最短路线为:22DB最短路线为

                                 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值