最短時間(Dijistra)

2021-09-10 16:37:38 字數 1769 閱讀 9264

時間限制:500ms

記憶體限制:100m

最短時間

描述:

夢工廠有 n 個分廠(從 1 開始編號),有m對分廠通過雙向鐵路相連。

為了保證每兩個分廠之間的同學可以方便地進行交流,掌舵人張老師就在那些沒有鐵路連線的分廠之間建造了公路。

在兩個直接通過公路或鐵路相連的分廠之間移動,需要花費 1 小時。

現在菜雞wxy和hbz都從1廠出發,wxy**車,hbz開汽車,各自前往n廠。但是,他們中途不能同時停在同乙個分廠

(但是可以同時停在n廠)。

現在請你來為wxy和hbz分別設計一條線路,使他們盡可能快地到達n廠(即要求他們中最後到達n廠的時間最短)。

所有的公路或鐵路可以被多次使用,求最短時間。(火車和汽車可以同時到達n,也可以先後到達。)

輸入:

首先有 2 個整數 n 和 m (2<=n<=500, 0<=m<=n*(n-1)/2 分別表示夢工廠分廠的數目和鐵路的數目;

接下來的 m 對數字,每對由兩個整數 u 和 v 構成,表示小鎮 u 和小鎮 v 之間有一條鐵路。(u!=v 1<=u,v<=n)

輸入保證無重邊

輸出

輸出乙個整數,表示答案,如果沒有合法的路線規劃,輸出-1

輸入樣例:

4 31 2

2 33 4

輸出樣例:

3

分析:每兩個工廠之間不是由鐵路連線就是由公路連線,所以1-n必有一條路,所以1-n花費時間為1,如果,1-n由鐵路相連,我們就計算公路從1到n的最短時間;反之,若1-n由公路相連,我們就計算鐵路從1到n的最短時間。所以,我們需要兩張地圖分別存鐵路和公路。然後用迪傑斯特拉求一下最短時間就可以了;

#include

#include

#include

using

namespace std;

#define inf 0x3f3f3f

int n,m;

int g1[

505]

[505];

//存鐵路的圖

int g2[

505]

[505];

//存公路的圖

int dis[

505]

,vis[

505]

;void

dijistra

(int g[

505]

) dis[1]

=0;for

(int i=

1;i<=n;i++)}

vis[k]=1

;for

(int j=

1;j<=n;j++)}

}int

main()

if(g1[1]

[n]==0)

else

}dijistra

(g2)

;int re=dis[n];if

(re==inf)

printf

("-1\n");

else

printf

("%d\n"

,re);}

return0;

}

最短時間過橋問題

問題如下 四個女人過橋,夜間有一火把,每次最多過兩個,必需帶火把,過橋速度不一樣,分別為 兩個人過用最慢乙個的速度,火把不能扔,如何在17min內四個女人都過橋?這個問題其實園子裡已經有解決方案了 也討論了多次 不過呢 很多只有思路 原始碼也不夠詳細 於是 我再演繹一下 歸納總結一下 其實是很簡單的...

最短路 dijkstra求最短時間)

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

所有車的過橋最短時間

今晚幫朋友助攻遇到了一道題,當時有思路但是沒有寫出來,後來結合牛客網上的解答寫了出來,也不知道具體能ac多少道題,先放在這裡等大家指點吧 有n輛車藥陸續通過一座最大承重為w的橋,其中第i輛車的重量為w i 通過橋的時間為t i 要求第i輛車上橋的時間不早於第i 1輛車上橋的時間,任意時刻橋上所有車輛...