最短路入门--djstl模板 hd2006
2017-08-25 09:32
274 查看
一个人的旅行
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 40324 Accepted Submission(s): 13693
[align=left]Problem Description[/align]
虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。
[align=left]Input[/align]
输入数据有多组,每组的第一行是三个整数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个数,表示草儿想去地方。
[align=left]Output[/align]
输出草儿能去某个喜欢的城市的最短时间。
[align=left]Sample Input[/align]
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
[align=left]Sample Output[/align]
9
题解:
这道题也是一个简单的模板题,关于的djslt算法的过程我就不介绍了(不会的话可以看之前我发的 又一定的解释),我直接说这题的思路,首先做一个邻接矩阵,将输入的值存入矩阵中 如果该值小于原先对应的值则更换,这是路的输入, 原本这道题可以用flyd n^3枚举每一个 起点到终点的最短路, 但是这道题用以便djstl就解决了,原因在于我将草儿的起点设为0城市 而0城市到与之相邻的城市,也就是出发的城市,的距离为0, 并且我又设置了一个n=n+1的城市(原本最后城市为n)将其想到达的地方与n+1城市的距离设置为0,因此我们用djstl想要求出想到达城市的最短距离(在m个想到达的城市中找一个最短的距离(即为最优答案))
因此我们需要求出到达n+1的距离,。就实现了对m个想到达的城市的最短距离的求解),最后保存在dist【n+1】中,通俗来说, dist【n+1】表示的是m个地点最短距离 so over!
#include<iostream> #include<string.h> #define N 1000 #define INF 0x3f3f3f3f #define f(a,b) (a>b)>a:b using namespace std; int map ,dist ,n; bool vis ; int a,b,time,i,j,k; int t,s,d; int djstl() { for(i=0;i<=n;i++) dist[i]=map[0][i],vis[i]=false; dist[0]=0; vis[0]=true; for(i=1;i<=n;i++) { int min=INF; for(j=0;j<=n;j++) if(!vis[j]&&min>dist[j]) min=dist[k=j];vis[k]=true; for(j=0;j<=n;j++) if(!vis[j]&&dist[k]+map[k][j]<dist[j]) dist[j]=dist[k]+map[k][j]; } return dist ; } int main() { while(cin>>t>>s>>d) { memset(map,INF,sizeof(map)); for(i=1,n=0;i<=t;i++){ cin>>a>>b>>time; if(map[a][b]>time) map[a][b]=map[b][a]=time; if(n<a) n=a; if(n<b) n=b; } for(i=1;i<=s;i++) cin>>a,map[0][a]=map[a][0]=0; n++; for(i=1;i<=d;i++) cin>>a,map [a]=map[a] =0; cout<<djstl()<<endl; } return 0; }
相关文章推荐
- POJ 1847 Tram【最短路入门Dijkstra算法模板题目一】
- HDU 2544 最短路 【最短路入门模板题】
- POJ 1847 Tram【最短路入门Dijkstra算法模板题目一】
- 最短路 模板题(DJ)
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。+string +dfs +bfs等重要算法
- STL学习----入门(2)[模板介绍]
- STL + c++ + 模板 + 重要思维 + 基础算法+ 经典算法 + 经典实例 + 编程总结+ 心得+ 入门必会 + 知识点汇总。
- EJS 模板快速入门
- STL 快速入门(二)
- 标准模板STL简介
- hdu 1754 I Hate It【线段树入门+模板详解】
- STL入门导论[原+译]
- LIS 模板 (最长上升/下降子序列) STL实现
- POJ---2449 Remmarguts' Date[K短路入门题(Dijkstra()||Spfa()+A*)]
- codeforces602C The Two Routes (最短路模板题)
- 转: Kaggle入门模板:以手写识别Digit Recognizer为例
- 最短路-dijkstra与floyd的邻接矩阵模板示例
- Angular系列----AngularJS入门教程01:AngularJS模板 (转载)
- POJ 2449 Remmarguts' Date (第k短路 A*搜索算法模板)
- [备战NOI同步赛]最短路模板