這幾天自學了最短路的
bellman_ford和dijkstra演算法,通過一道簡單題來回顧一下。
題目**hdu1874.
problem description
某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。
現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。
input
本題目包含多組資料,請處理到檔案結束。
每組資料第一行包含兩個正整數n和m(0
output
對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出-1.
sample input
3 30 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...