http://www./2009/09/compare-dijkstra-shortest-path-algorithm-matlab-code/ 整整一天,我都在網(wǎng)絡(luò)上尋找Dijkstra算法的matlab代碼。我找到了許多,然而,它們?nèi)慷疾荒軡M足我的需要。 后來我只好參考wiki給出的正確的dijkstra算法,自己寫了個代碼。wiki給出的算法在此: http://en./wiki/Dijkstra%27s_algorithm 摘錄如下。
作為教訓(xùn),我總結(jié)一下網(wǎng)絡(luò)上能找到的大多數(shù)dijkstra算法的matlab代碼的優(yōu)劣。 這套代碼可以說是國內(nèi)傳播最廣的dijkstra算法的matla實(shí)現(xiàn),可以在許多網(wǎng)站找到,例如這里: 它的輸入是賦權(quán)鄰接矩陣和起始點(diǎn),輸出是起始點(diǎn)到各點(diǎn)的距離和最短路樹。代碼在這里。 然而!它是錯的! 用這套代碼可以得出起始點(diǎn)到各點(diǎn)的距離,然而算法得出的最短路樹完全是錯的,甚至用示例數(shù)據(jù)得到的最短路樹都根本不可理解。算法根本就沒按正確的dijksta算法的思路走。 2.Dijkstra 算法 matlab程序 這套算法也流傳甚廣,鏈接在這里: http://www./Article/jsjjjs/biafh/200504/735.html 這套算法很簡短,功能也很簡單。它的輸入是賦權(quán)鄰接矩陣,輸出是起始點(diǎn)到各點(diǎn)的距離和最短路樹。使用示例數(shù)據(jù)可以得到正確的結(jié)果。缺點(diǎn)是它僅能算出從點(diǎn)1到其他各點(diǎn)的距離。 代碼在這里。 后來我又發(fā)現(xiàn)了第二個缺點(diǎn):這算法也是錯的。從根本上就是錯的,只是恰好能把示例數(shù)據(jù)算對而已。 3~4.來自mathworks的各種dijkstra代碼 它們應(yīng)該都是對的,然而太復(fù)雜,不適合我的應(yīng)用;它們各自具有其應(yīng)用范圍,我沒有依次嘗試,就放在這里而已。 代碼A只能提供從某點(diǎn)到某點(diǎn)的距離,然而不提供從某點(diǎn)到其它任意點(diǎn)的最短路樹。 代碼B能夠提供從某點(diǎn)到其它任意點(diǎn)的最短路樹,但是它是基于地圖的,需要提供每個點(diǎn)的坐標(biāo)。 5.正確的,可以給出從某點(diǎn)到其它任意點(diǎn)的最短路樹的dijkstra算法代碼 我寫的,應(yīng)該沒問題了。 輸入是賦權(quán)鄰接矩陣和起始點(diǎn),輸出起始點(diǎn)到其他各點(diǎn)的距離和最短路樹。 代碼在此。
|
|