Dijkstra演算法解HDU1874

2021-08-27 06:43:14 字數 1143 閱讀 9878

dijkstra演算法是用來解決:確定起點的最短路徑問題:即已知起始結點,求最短路徑的問題。

它是常用的最短路徑演算法之一。最常用的路徑演算法有:dijkstra演算法、a*演算法、bellman-ford演算法、floyd-warshall演算法、johnson演算法。

缺陷:它一般用來解決正權,單源路徑的最短路問題。

dijkstra演算法思想:設g=(v,e)是乙個帶權有向圖,把圖中頂點分為兩部分,第一組我們就稱它為藍點集合(就是用來存放已經得到最短路徑的點)用s表示,另乙個我們稱他們為紅點集合(就是用來存放尚未找到最短路徑的點)用u來表示。一開始藍點集合中只有乙個源點,以後任務就是不斷動消滅紅點,使他們成為藍點集合的成員。在這個過程中每次策反乙個紅點成員。直到紅點集合被消滅掉。

dijkstra演算法具體的步驟:

(1)初始時,s 只包含源點設為v0,u包含剩餘的點。

(2)從u中選取乙個距離v0最小的頂點vi,將vi加入到藍點集合中。

(3)然後對u中的點到源點的距離進行一次更新就是以vi為中間節點,修改u中各頂點到源點的距離。(修改動方法見下面程式)

(4)重複步驟2和3直到所有頂點都變成藍點中動成員。

例: 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。

現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。

input

本題目包含多組資料,請處理到檔案結束。

每組資料第一行包含兩個正整數n和m(0 dist[k] +map[k][j])}}

}public static void main(string args)

}s = sc.nextint();

e = sc.nextint();

main ma=new main(n,s,e,map);

ma.dijkstra();

int dist=ma.getdist();

if (dist[e] == integer.max_value)

system.out.println(-1);

else

system.out.println(dist[e]);}}

}原始碼:

Dijkstra演算法解最短路

第一行輸入兩個數表示n個地點和m條路徑,接下來m行中每行三個數a b c,分別表示地點編號和花費時間 權重 輸入0 0 時程式結束。輸出每種情況的最小時間。這道題沒有出現負權,尋找最短路徑時選擇dijkstra演算法 include using namespace std define n 102 ...

hdu 1874 Dijkstra演算法模板

單源最短路徑 迪傑斯特拉演算法 1.初始化地圖,map i j 記錄城鎮 i,j之間最短的道路長度,若無道路連通 則為極大值 2.從起始城鎮開始,用廣度優先搜尋思想,嵌入鬆弛處理演算法,用dis i 記錄起始城鎮到城鎮 i 的最短路徑長度 3.答案位於dis t 即終點t城鎮到起始城鎮的最小距離 i...

HDU2544(最短路dijkstra演算法)

描述 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t恤。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?輸入輸入包括多組資料.每組資料第一行是兩個整數n m n 100,m 10000 n表示成都的大...