題目鏈結
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?
輸入包括多組資料。每組資料第一行是兩個整數n、m(n<=100,m<=10000),n表示成都的大街上有幾個路口,標號為1的路口是商店所在地,標號為n的路口是賽場所在地,m則表示在成都有幾條路。n=m=0表示輸入結束。接下來m行,每行包括3個整數a,b,c(1<=a,b<=n,1<=c<=1000),表示在路口a與路口b之間有一條路,我們的工作人員需要c分鐘的時間走過這條路。
輸入保證至少存在1條商店到賽場的路線。
對於每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間
2 11 2 3
3 31 2 5
2 3 5
3 1 2
0 03
2
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
1e4+5;
int head[maxn]
;int cnt=0;
struct edgee[maxn*4]
;struct node
node
(int dis,
int id)
:dis
(dis),id
(id)
//方便插入新節點
bool
operator
<
(const node& a)
const
//過載< 用於在優先佇列中排序};
int dis[maxn]
,vis[maxn]
;priority_queue q;
//優先佇列
void
add(
int u,
int v,
int w)
//實際上可以理解為頭插法的鄰接表
void
dij(
int x)}}
}int
main()
dij(1)
;if(dis[n]
==0x3f3f3f3f
)//如果dis[n]的值沒有被改變就是無法到達
cout<
<-1
<
else
cout<
<
}return0;
}
模版 堆優化Dijkstra求最短路
一 堆優化的主要思想就是使用乙個優先佇列 就是每次彈出的元素一定是整個佇列中最小的元素 來代替最近距離的查詢,用鄰接表代替鄰接矩陣,這樣可以大幅度節約時間開銷。幾個細節 優先佇列的資料型別 優先佇列應該用於快速尋找距離最近的點。由於優先佇列只是將最小的那個元素排在前面,因此應該定義一種資料型別,使得...
Dijkstra求最短路(樸素and堆優化)
題目來自acwing 題目描述 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,所有邊權均為正值。請你求出1號點到n號點的最短距離,如果無法從1號點走到n號點,則輸出 1。輸入格式 第一行包含整數n和m。接下來m行每行包含三個整數x,y,z,表示點x和點y之間存在一條有向邊,邊長為z。輸出格式...
最短路之dijkstra及其堆優化
dijkstra演算法用來解決單源最短路徑問題 通常來說就是求解乙個圖中兩節點的最短路徑 只適用於正權邊 該演算法的樸素想法是鬆弛的思想 即若dis 1 3 7 dis 1 2 1 dis 2 3 1 則節點2的存在就可以對1,3鬆弛 在鬆弛完乙個節點之後要選擇尚未進行鬆弛的節點鬆弛,且要選擇距起點...