杭電1874 暢通工程續 SPFA演算法

2021-07-11 05:51:26 字數 1409 閱讀 1640

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

一道簡單的單源最短路徑模板題。曾用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。...