乙個人的旅行 HDU 2066

2021-08-22 13:39:49 字數 2012 閱讀 4744

乙個人的旅行 hdu - 2066

輸入資料有多組,每組的第一行是三個整數t,s和d,表示有t條路,和草兒家相鄰的城市的有s個,草兒想去的地方有d個;

接著有t行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時;(1=<(a,b)<=1000;a,b 之間可能有多條路)

接著的第t+1行有s個數,表示和草兒家相連的城市;

接著的第t+2行有d個數,表示草兒想去地方。

輸出草兒能去某個喜歡的城市的最短時間。

6 2 3

1 3 5

1 4 7

2 8 12

3 8 4

4 9 12

9 10 2

1 2

8 9 10

這個題可以有兩種想法:

第一種:草兒通過相鄰的s個城市,來找到達d個城市中某個城市的最短時間,將s個城市分別當成起點,來找到達d個城市的最短時間,通過呼叫s次這個dijkstra演算法,然後找到最短時間。

第二種:草兒所在的城市,到達這s個城市的時間都可以看做為0,然後通過一次dijkstra演算法,就可以找到最短時間。

當然這兩個想法我最先想到的就是第乙個,後來看到有的人只用了一次dijkstra演算法才轉過彎來~

#include

#include

#include

#include

using

namespace

std;

const

int inf=0x3f3f3f3f;

#define maxn 1007

int path[maxn][maxn]; //t條路徑

int sa[maxn]; //存放草兒相鄰的s個城市

int da[maxn]; //存放草兒想去的d個城市

int dis[maxn];

int vis[maxn];

int t,s,d;

int minpath=inf; //到達某個城市的最短時間

int road=-1;

void dijkstra(int a)

}for(int i=0;iint main()

for(int i=0;iscanf("%d",&sa[i]);

for(int i=0;iscanf("%d",&da[i]);

for(int i=0;i//呼叫s次dijkstra

printf("%d\n",minpath);

}return

0;}

#include

#include

#include

#include

using

namespace

std;

#define maxn 1007

const

int inf=0x3f3f3f3f;

int path[maxn][maxn];

int sa[maxn];

int da[maxn];

int dis[maxn];

int vis[maxn];

int t,s,d;

int road=-1;

void dijkstra()

}}int main()

for(int i=0;iscanf("%d",&sa[i]);

path[0][sa[i]]=0;

}for(int i=0;iscanf("%d",&da[i]);

dijkstra();

int ans=inf;

for(int i=0;iprintf("%d\n",ans);

}return

0;}

hdu 2066 乙個人的旅行

我覺得這題應該用floyd演算法會更好一點吧,猜的,還沒學,囧.我是用dijstra暴力水過.嗯開始學floyd code include include include include include include include include include include include ...

Hdu 2066 乙個人的旅行

最短路問題 dijkstra 分析 1 本題的起始點和終點不唯一。假設有一點起始點離全部的相鄰城市的距離都是1,有一點終點離全部的想要去的目的地的距離也都是1,則將dijkstra出來的值減2即可。2 兩個城市之間的路不唯一,可有多條路,所以在輸入的時候做一下判斷,選取最小的。ac include ...

HDU2066 乙個人的旅行

problem description input 輸入資料有多組,每組的第一行是三個整數t,s和d,表示有t條路,和草兒家相鄰的城市的有s個,草兒想去的地方有d個 接著有t行,每行有三個整數a,b,time,表示a,b城市之間的車程是time小時 1 a,b 1000 a,b 之間可能有多條路 接...