7-14 天梯地图(30 分)
来源:互联网 发布:淘宝怎么去同款 编辑:程序博客网 时间:2024/05/21 00:00
本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。
输入格式:
输入在第一行给出两个正整数N
(2 ≤ N
≤ 500)和M
,分别为地图中所有标记地点的个数和连接地点的道路条数。随后M
行,每行按如下格式给出一条道路的信息:
V1 V2 one-way length time
其中V1
和V2
是道路的两个端点的编号(从0到N
-1);如果该道路是从V1
到V2
的单行线,则one-way
为1,否则为0;length
是道路的长度;time
是通过该路所需要的时间。最后给出一对起点和终点的编号。
输出格式:
首先按下列格式输出最快到达的时间T
和用节点编号表示的路线:
Time = T: 起点 => 节点1 => ... => 终点
然后在下一行按下列格式输出最短距离D
和用节点编号表示的路线:
Distance = D: 起点 => 节点1 => ... => 终点
如果最快到达路线不唯一,则输出几条最快路线中最短的那条,题目保证这条路线是唯一的。而如果最短距离的路线不唯一,则输出途径节点数最少的那条,题目保证这条路线是唯一的。
如果这两条路线是完全一样的,则按下列格式输出:
Time = T; Distance = D: 起点 => 节点1 => ... => 终点
输入样例1:
10 150 1 0 1 18 0 0 1 14 8 1 1 15 4 0 2 35 9 1 1 40 6 0 1 17 3 1 1 28 3 1 1 22 5 0 2 22 1 1 1 11 5 0 1 31 4 0 1 19 7 1 1 33 1 0 2 56 3 1 2 15 3
输出样例1:
Time = 6: 5 => 4 => 8 => 3Distance = 3: 5 => 1 => 3
输入样例2:
7 90 4 1 1 11 6 1 3 12 6 1 1 12 5 1 2 23 0 0 1 13 1 1 3 13 2 1 2 14 5 0 2 26 5 1 2 13 5
输出样例2:
Time = 3; Distance = 4: 3 => 2 => 5
我的代码:#include<iostream>#include<stack>#include<memory.h>using namespace std;int f1[501],f2[501],ti[501][501],co[501][501];int x,y,z,d,t,cnt[501],vis[501],s,e,n,m,i,j;void min1(int s){int i,j;vis[s]=1;for(i=0;i<n;i++){int k=-1,min=999999;for(j=0;j<n;j++){if(vis[j]==0 && co[s][j]<min){min=co[s][j];k=j;}}if(k==-1) break;vis[k]=1;for(j=0;j<n;j++){if(vis[j]==0 && co[s][j]>co[s][k]+co[k][j]){f1[j]=k;co[s][j]=co[s][k]+co[k][j];cnt[j]=cnt[k]+1;}else if(vis[j]==0 && co[s][j]==co[s][k]+co[k][j] && cnt[j]>cnt[k]+1){f1[j]=k;cnt[j]=cnt[k]+1;}}}}void min2(int s){int i,j;vis[s]=1;for(i=0;i<n;i++){int k=-1,min=999999;for(j=0;j<n;j++){if(vis[j]==0 && ti[s][j]<min){min=ti[s][j];k=j;}}if(k==-1) break;vis[k]=1;for(j=0;j<n;j++){if(vis[j]==0 && ti[s][j]>ti[s][k]+ti[k][j]){f2[j]=k;ti[s][j]=ti[s][k]+ti[k][j];co[s][j]=co[s][k]+co[k][j];}else if(vis[j]==0 && ti[s][j]==ti[s][k]+ti[k][j] && co[s][j]>co[s][k]+co[k][j]){f2[j]=k;co[s][j]=co[s][k]+co[k][j];}}}}int main(){scanf("%d%d",&n,&m);for(i=0;i<n;i++){cnt[i]=1;for(j=0;j<n;j++){ti[i][j]=ti[j][i]=999999;co[i][j]=co[j][i]=999999;}}for(i=0;i<m;i++){scanf("%d%d%d%d%d",&x,&y,&z,&d,&t);if(z==1){ti[x][y]=t;co[x][y]=d;}else{ti[x][y]=ti[y][x]=t;co[x][y]=co[y][x]=d;}}scanf("%d%d",&s,&e);min1(s);int k1=e,k2=e,len=co[s][e];stack<int>ss1,ss2;ss1.push(k1);while(f1[k1]!=0){ss1.push(f1[k1]);k1=f1[k1];}memset(vis,0,sizeof(vis));min2(s);ss2.push(k2);while(f2[k2]!=0){ss2.push(f2[k2]);k2=f2[k2];}if(ss1==ss2){printf("Time = %d; Distance = %d: %d",ti[s][e],len,s);while(!ss1.empty()){printf(" => %d",ss1.top());ss1.pop();}}else{printf("Time = %d: %d",ti[s][e],s);while(!ss2.empty()){printf(" => %d",ss2.top());ss2.pop();}puts("");printf("Distance = %d: %d",len,s);while(!ss1.empty()){printf(" => %d",ss1.top());ss1.pop();}}return 0;}
阅读全文
0 0
- 7-14 天梯地图(30 分)
- 天梯地图(30 分)
- 天梯地图(30 分)
- 天梯赛练习 天梯地图(SPFA)
- 天梯地图(Dijkstra变形)
- pta 天梯地图 (Dijkstra)
- L3-007. 天梯地图
- PTA 一 天梯地图
- PTA天梯地图
- 5-11 天梯地图
- L3-007. 天梯地图
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
- 团体程序设计天梯赛 L3-007. 天梯地图(dijkstral+记录所有最短路径)
- patest L3-007 天梯地图
- PAT【L3-007】 天梯地图
- Floyd算法-天梯地图.cpp
- L3-007. 天梯地图-PAT团体程序设计天梯赛GPLT
- 团体程序设计天梯赛L3-007 天梯地图
- ORA-22835:缓冲区对于CLOB到CHAR转换而言太小
- 十个jQuery代码片段助力Web开发
- FFmpeg的Android端调用库ffmpeg-android的简单使用
- 3 微服务实战系列
- 重新铸就Json
- 7-14 天梯地图(30 分)
- windows下的cmd总结
- ElasticSearch5.X嵌套桶(三)
- WebSocket与消息推送
- opencv中伪彩色applyColorMap函数(C++ / Python)
- 杭电ACM OJ 1006 Tick and Tick 厌倦时钟 其实就是简单的数学题
- Linux安装Tomcat环境
- iOS微信聊天界面朋友圈多个小视频同时播放不卡顿
- [BZOJ4710][JSOI2011]分特产(组合数学+容斥原理)