問題描述
給定一張 n 個點的
無向帶權圖
,節點的編號從 1 至 n,求從 s 到 t 的最短路徑長度。
第一行 4 個數 n,m,s, t,分別表示點數、邊數、起點、終點。
接下來 m 行,每行 3 個正整數 u,v,w,描述一條 u 到 v 的雙向邊,邊權為 w。
保證 1<=u,v<=n。
輸出一行乙個整數,表示 s 到 t 的最短路。
7 11 5 4 (7個點,11條邊,起點是5,終點是4)
7(3+1+3)
本題共設定 12 個測試點。
對於前 10 個測試點,保證 n<=2500,m<=6200,對於每條邊有 w<=1000。這部分資料有梯度。
對於所有的 12 個測試點,保證 n<=100,000,m<=250,000。
[本題是 dijkstra 演算法的模板練習題。]
[使用樸素的 dijkstra 演算法可以通過前 10 個測試點。]
[使用堆或__std::priority_queue__優化的 dijkstra 演算法可以通過所有測試點。]
// ***************== **實現開始 ***************==
const int n = 100005;
typedef pairpii;
//graph:存放圖,graph[i]表示的是節點i的出邊,其中first儲存到達的節點,second儲存邊權
//pq:輔助dijkstra演算法的優先佇列
//flag:記錄每個節點是否進行過鬆弛,1表示進行過,0表示未進行過
//mind:儲存起點s到每個節點的最短路徑長度
vectorgraph[n];
priority_queue,greater> pq;
bool flag[n];
int mind[n];
// 這個函式用於計算答案(最短路)
// n:節點數目
// m:雙向邊數目
// u,v,w:分別存放各邊的兩端點、邊權
// s,t:分別表示起點、重點
// 返回值:答案(即從 s 到 t 的最短路徑長度)
int shortestpath(int n, int m, vectoru, vectorv, vectorw, int s, int t) }}
return mind[t];
}// ***************== **實現結束 ***************==
最短路徑演算法 最短路
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...
最短路演算法
常用的最短路演算法有三種 disjkstra,floyd,ballman floyd 一 disjkstra演算法 dijkstra演算法要求圖上的權非負數。同樣使用於無向圖 html view plain copy include stdio.h hdu 2544 define maxsum 0x...
最短路演算法
最短路演算法有很多,具體哪個好,和資料是有很大關係的 從起點開始向外擴充套件,最壞o v e 實際體驗比o e log v 的dijkstra可能快 include include define max e 4002 define max v 1002 define inf 0x3f3f3f usi...