乙個人的旅行 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 31 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 之間可能有多條路 接...