最短路徑之 Dijkstra模板

2021-06-28 16:52:44 字數 1657 閱讀 5591

一:時間複雜度為o(v*v)的dijkstra

const int max_v = 100 + 10;

const int inf = 1<<30;

int cost[max_v][max_v];//權值

int d[max_v];//頂點s出發最短距離

bool used[max_v];//以使用過的圖

int v;//頂點數

int edge;//邊數

void dijkstra(int s)

;vectorg[maxn];

int d[maxn]; //最短路徑

void solve()}}

printf("%d\n",d[n-1]);

}

三:模板題目hdu2544

description

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎? 

input

輸入包括多組資料。每組資料第一行是兩個整數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條商店到賽場的路線。 

output

對於每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間

sample input

2 1

1 2 3

3 31 2 5

2 3 5

3 1 2

0 0

sample output

3

2

第一種ac**

#include #include #include #include #include #include using namespace std;

const int max_v = 100 + 10;

const int inf = 1<<30;

int cost[max_v][max_v];//權值

int d[max_v];//頂點s出發最短距離

bool used[max_v];//以使用過的圖

int v;//頂點數

int edge;//邊數

void dijkstra(int s)

;vectorg[maxn];

int d[maxn]; //最短路徑

void solve()}}

printf("%d\n",d[n-1]);

}int main()

{ int i, a, b, c;

edge e;

while(~scanf("%d%d",&n,&r))

{if(n == 0 && r == 0) break;

for(i = 0; i < maxn; i++) g[i].clear();

for(i=0; i

最短路徑dijkstra模板

第一行兩個整數n m。n表示頂點個數 頂點編號為1 n m表示邊的條數。接下來m行表示,每行有3個數x y z。表示頂點x到頂點y邊的權值為z。求源點為1的最短路徑。題目 坐在馬桶上看演算法 演算法7 dijkstra最短路演算法 這道題我只是想練練dijkstra模板,dijkstra主要由兩個步...

最短路 路徑還原(dijkstra,模板)

b.wzy的大冒險 出發咯qaq 單點時限 2.0 sec 記憶體限制 512 mb 第一行兩個數n,m 1 n 103,1 m 103 接下來m行,每行三個數x,y,z,表示點 x 與點 y 之間有一條權值為 z 的有向邊 1 x,y,z 103 第一行乙個整數表示 1 到 n 的最短距離 第二行...

Dijkstra 最短路徑

dijkstra 最短路徑 針對有向圖,不支援負權值 圖的相鄰矩陣表示方法,還要用到最小值堆 include include define unvisited 0 define visited 1 define infinite 9999 設定最大值 define n 5 定義圖的頂點數 using...