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
一道簡單的單源最短路徑模板題。曾用d
ijkstra演算法解決過,現在用spfa演算法再做了一遍。
#include#include#include#include#include#include#include#include#includeusing namespace std;
#define inf 1000010000 //定義乙個很大的數
queueque;
vectorvv[205];
int v_count,l_count; //頂點數和邊數
//int book[100][100]; //book記錄某頂點是否走過
int v[205]; //v記錄起點到該頂點走的最小距離
int d[205][205]; //d記錄兩頂點之間距離
bool book[205]; //判斷是否在佇列裡
int a,b,d;
int len,t;
int start,endd;
void init()
while(!que.empty())
que.pop(); //清空
memset(d,inf,sizeof(d));
memset(book,false,sizeof(book));
//memset(v,0,sizeof(v));
}int main() //頂點編號從 1 --- v_count 初始點為 1
cin>>start>>endd;
v[start] = 0;
for(int i=0; iv[t]+d[t][vv[t][i]])//這麼走更近
}que.pop(); //拿出該點
book[t] = false;
} if(v[endd] != inf)
cout<
杭電1874暢通工程續 最短路徑
題目 problem description 某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走...
暢通工程續 HDU 1874 複習spfa
某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。input 本題目包含多組資料,請處...
HDOJ 杭電1874 暢通工程(Floyd演算法)
2018 5 1 我用的是floyd演算法,不得不說,這個演算法還是相當的優美了 雖然說時間複雜度達到了o n 3 但是 還是相當簡潔了!對於這個題目而言,有幾點需要注意的地方 1 賦值是雙向的,比如說a,b之間有一條要花費time時間的路,那麼我們需要將x a b 與x b a 都賦值為time。...