他們的不同之處是:
兩個集合u,v
u是構成最小生成樹的集合,v原圖的集合
prim 每次都是從u的每個點出發,尋找u集合與v集合最近的距離的點,再將v中的該點加入u中
dijksra從原點出發在v找離該點最近的點 p1, 將該距離加入到 dis[i],接著以p1為原點開始找
舉個例子就知道他們不能亂來了:
有四個頂點
(v0, v1, v2, v3)和四條邊
且邊值定義為
(v0, v1)=20, (v0, v2)=10, (v1, v3)=2, (v3, v2)=15
的圖,用
prim
演算法得到的最小生成樹中v0跟
v1是不直接相連的,也就是在最小生成樹中
v0v1
的距離是
v0->v2->v3->v1
的距離是
27,而用
dijkstra
演算法得到的
v0v1
的距離是
20,也就是二者直接連線的長度。
相關鏈結
Prim演算法 與 dijkstra演算法
有時總將兩者搞混,兩者都是基於貪心策略,且都是將圖中頂點劃分為兩部分,每次取最小值。在這裡對兩者的演算法做乙個區分。prim演算法是解決圖的 最小生成樹 問題,在每次迴圈中,選取乙個點在s中,另乙個點在v s中,且兩點權值最小,直到v s為空。dijkstra演算法是解決圖的 最短路徑 問題,即從某...
Dijkstra演算法與Prim演算法的異同
dijkstra演算法用於構建單源點的最短路徑樹 mst 即樹中某個點到任何其他點的距離都是最短的。例如,構建地圖應用時查詢自己的座標離某個地標的最短距離。可以用於有向圖,但是不能存在負權值 bellman ford可以處理負權值 dijkstra 選初始點r,q是無向圖g中所有點v的權值優先佇列,...
Prim演算法和Dijkstra演算法的異同
之前一直覺得prim和dijkstra很相似,但是沒有仔細對比 今天看了下,主要有以下幾點 1 prim是計算最小生成樹的演算法,比如為n個村莊修路,怎麼修花銷最少。dijkstra是計算最短路徑的演算法,比如從a村莊走到其他任意村莊的距離。2 prim演算法中有乙個統計總len的變數,每次都要把到...