初學最短路演算法

2021-07-09 18:42:45 字數 3262 閱讀 1744

這幾天自學了最短路的

bellman_ford和dijkstra演算法,通過一道簡單題來回顧一下。

題目**hdu1874.

problem description

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

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

input

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

每組資料第一行包含兩個正整數n和m(0

output

對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出-1.

sample input

3 3

0 1 1

0 2 3

1 2 1

0 23 1

0 1 1

1 2

sample output

2

-1

解一:dijkstra演算法

#include #include #include #include #include #include #include #include #include #define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

#define mem(a) memset(a, 0, sizeof(a))

#define eps 1e-5

#define m 100005

#define inf 99999

using namespacestd;

intvis[10006];

inta,b;

intd[m],w[1005][1005];//d記錄從起點到i的最短距離,w[i][j]表示i到j的距離//

intst,en;

voiddij()

d[st]=0;//起點到起點的距離為0//vis[st]=1;//標記起點//

for(

inti=0;i<a;i++)迴圈每個點//

}vis[v]=1//標記這個點//

for(

intk=0;k<a;k++)}}

}int

main

() }

for(

inti=0;i<b;i++)

}cin>>st>>en;dij();

if(d[en]<inf)

else

}}

解二:bellman_ford演算法

#include #include #include #include #include #include #include #include #include #define max(a,b) ((a)>(b)?(a):(b))

#define min(a,b) ((a)<(b)?(a):(b))

#define mem(a) memset(a, 0, sizeof(a))

#define eps 1e-5

#define m 100005

#define inf 0x3f3f3f3f

using namespacestd;

structnoded[2000];

intaa,bb,st,en;

intdis[m];

voidbf(

intx,

inty)

dis[st]=0;

for(

inti=0;i<aa-1;i++)//迴圈aa-1個點//}}

if(dis[en]==inf)

else

}int

main

()cin>>st>>en;bf(st,en);

}}

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的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...