SHU1757 村村通工程(Floyd演算法)

2021-07-09 04:41:29 字數 803 閱讀 1309

某市啟動村村通工程後,已修建了很多路,但尚未完成整個工程。不過路多了也煩惱,每次要從乙個村鎮到另乙個村鎮時,都有許多種道路方案可以選擇,但走最短距離總是每個人追求的目標。

現在,已知乙個村莊和另乙個作為終點的村莊,請你計算出最短需要行走多少路程。

本題目包含多組資料。每組資料第一行包含兩個正整數n和m(0接下來是m行道路資訊。每一行有三個整數a、b、x(0£a、b再接下一行有兩個整數s、t(0£s,t對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出-1.

3 3

0 1 1

0 2 3

1 2 1

0 23 1

0 1 1

1 22

-1 floyd演算法的基本思想如下:從任意節點a到任意節點b的最短路徑不外乎2種可能,1是直接從a到b,2是從a經過若干個節點x到b。所以,我們假設dis(ab)為節點a到節點b的最短路徑的距離,對於每乙個節點x,我們檢查dis(ax) + dis(xb) < dis(ab)是否成立,如果成立,證明從a到x再到b的路徑比a直接到b的路徑短,我們便設定dis(ab) = dis(ax) + dis(xb),這樣一來,當我們遍歷完所有節點x,dis(ab)中記錄的便是a到b的最短路徑的距離。

根據這樣的思路我寫出了如下**:

void floyd()

cin>>s>>t;

floyd();

if(map[s][t]==inf)

cout<<"-1"

cout<} return 0;

}

洛谷P1536 村村通

有t組測試資料 t 是的你沒有看錯,就是無窮大!其實是因為我不知道有多少 每組測試資料給出n個村莊,m條道路,問還需幾條道路,使這張圖聯通。用並查集連線,再統計這張圖還需幾條路聯通。include define r i,a,b for int i a i b i using namespace st...

洛谷P1536 村村通

題目提供者johnkram 標籤雲端 難度普及 提高 時空限制1s 128mb 提交 討論 題解 某市調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。市 村村通工程 的目標是使全市任何兩個城鎮間都可以實現交通 但不一定有直接的道路相連,只要相互之間可達即可 請你計算出最少...

P1536 村村通(洛谷)並查集

隔壁的dgdger帶我看了看老師的lca教程,我因為學習數學太累了 就是懶 去水了一下,感覺很簡單的樣子,於是我也來寫 水 個部落格吧。題目描述 某市調查城鎮交通狀況,得到現有城鎮道路統計表。表中列出了每條道路直接連通的城鎮。市 村村通工程 的目標是使全市任何兩個城鎮間都可以實現交通 但不一定有直接...