Solaris_navi Tech Space

Skills, theorems, Science and Technologies of Informatik and Wirschaftswissenschaft.

Dijkstra 有向带权最短路径算法的简明阐释

Dijkstra 算法的目的就是计算在有向带权的完全联通图下从A点到B点所需要的最短路径,权重是路径的长度或者可以说是开销。也就是说,长度越短开销越少的路径的选择几率就越大。网上很多的文章引用了红蓝点来标记,不过上次看到wikipedia上的一副图后觉得,算法这个东西虽然写的越数学越显得有能耐,但既然写出来就是让人看的,为何不写的简明易懂。可能我以后学完Knuth的那本书后,就做一本民众都看得动的算法书好了。算法没那么难。

 

言归正传。

 

假设从A点到B点有以下路径关系:

 

从A出发,可以选择去C、D、E,距离分别是20、3、15。

从C点可以直接到B,也可以选择到F,距离分别是2、5。

从E点也到F,距离是20。

从D点可以到C、E点,距离分别是10,15。

从F点最后会到B,距离是20。

 

A ------20----------→  C  --------------2------------------- → B

                                ↑  ↘--------5--------↘

 ↘ ------3----------→  D                             F ---20------  ↑

                                ↓

↘ ------15----------→ E  -------20----------↑

 

 

线里面的数字就是权,也就是距离,比如 A->C 的距离是20,C->B的距离是1。显然从A->D->C->B是最优路径:3+10+2=15.

 

好那么,Djikstra 要怎么做呢?

 

 

步骤1:

我们从A点开始,比较A点到C、D、E三点的最短路径,同时,在C、D、E三点分别记录A点到这三个点的距离。

这样我们就会首先选择D点,并在C、D、E上分别标出:20、3、15。

步骤2:

我们从选择的D点开始,D点可以到C、E,距离分别是10、15,D点本身是3,于是标记C、E两点分别为:3+10=13、3+15=18.

这时,C点原先是20,现在是13,所以C点变为13.

E点原先是15,现在是18,保留15不变。

13<15,所以选择C点为下一个点。

步骤3:

C点可以去B、F点,距离分别是2和5.显然C点会选择B点。

B被标记为13+2=15

F被标记为13+5=18

因为到B点就结束了。所以算法就完成了。

 

毕竟这个只是sn个人理解而已,很有可能理解错了-_-!! 如果理解如果有错误,请指出,大家一起学习嘛。

 

以上!

阅读更多
文章标签: 算法 c
个人分类: Other
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭