地铁换乘
来源:互联网 发布:淘宝直通车选词工具 编辑:程序博客网 时间:2024/06/11 19:49
</pre>题目简介: <br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。 </span><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18 </span><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15 </span><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">输入:输入两个不同的站名 </span><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次 </span><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">输入样例:A1 A3 </span><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><br style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px" /><p><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">输出样例:3 </span></p><p><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px"></span></p><p><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px"></span></p><p><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">这种鬼题刚开始看的时候没什么头绪,看上去就像是要用数据结构来做。不过个人数据结构又不是很好</span></p><p><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">所以搞了很久才搞出来</span></p><p><span style="color:rgb(17,17,17); font-family:Helvetica,Arial,sans-serif; font-size:13px; line-height:21.059999465942383px">这题有挺多方法解决的:可以穷举,可以用Dijkstra算法,可以用Floyd算法...</span></p><p><span style="font-family:Helvetica,Arial,sans-serif; font-size:12px; color:#111111"><span style="line-height:21.059999465942383px">我是用Dijkstra算法做的:</span></span></p><p><span style="font-family:Helvetica,Arial,sans-serif; font-size:12px; color:#111111"><span style="line-height:21.059999465942383px">首先生成相对应的图:用矩阵表示(也可以用链表(可能相对复杂些))</span></span></p><p><span style="font-family:Helvetica,Arial,sans-serif; font-size:12px; color:#111111"><span style="line-height:21.059999465942383px">然后用Dijkstra算法计算</span></span></p><p><span style="font-family:Helvetica,Arial,sans-serif; font-size:12px; color:#111111"><span style="line-height:21.059999465942383px"></span></span></p><p><span style="font-family:Helvetica,Arial,sans-serif; font-size:12px; color:#111111"><span style="line-height:21.059999465942383px"></span></span></p><pre name="code" class="cpp">#include<stdio.h>#include<string.h>#include<string>#include<iostream>using namespace std;typedef struct Tree{ //表示图的数据结构 int weight[36][36]; //权值 int mark[36]; //是否访问标记 int result[36]; //某站到所有站的最短距离(结果存储)}Tree;void init(Tree &train) //生成相对应的图,初始化{ int i,j; for (i=1; i <= 36; i++) for (j=1; j<= 36; j++) if (i == j) train.weight[i][j] = 0; else train.weight[i][j] = 65535; // A路线 for (i=1; i <= 8; i++){ train.weight[i][i+1] = 1; train.weight[i+1][i] = 1; } for (i=10; i <= 12; i++){ train.weight[i][i+1] = 1; train.weight[i+1][i] = 1; } for (i=14; i <= 17; i++){ train.weight[i][i+1] = 1; train.weight[i+1][i] = 1; } train.weight[18][1] = 1; train.weight[1][18] = 1; // B路线 for (i=19; i <= 22; i++){ train.weight[i][i+1] = 1; train.weight[i+1][i] = 1; } for (i=24; i <= 27; i++){ train.weight[i][i+1] = 1; train.weight[i+1][i] = 1; } for (i=29; i <= 32; i++){ train.weight[i][i+1] = 1; train.weight[i+1][i] = 1; } //T1 T2 train.weight[34][9] = 1; train.weight[9][34] = 1; train.weight[34][10] = 1; train.weight[10][34] = 1; train.weight[34][23] = 1; train.weight[23][34] = 1; train.weight[34][24] = 1; train.weight[24][34] = 1; train.weight[35][13] = 1; train.weight[13][35] = 1; train.weight[35][14] = 1; train.weight[14][35] = 1; train.weight[35][28] = 1; train.weight[28][35] = 1; train.weight[35][29] = 1; train.weight[29][35] = 1; for (i=1; i <= 36; i++) train.mark[i] = 0;}//Dijkstra算法计算最短路径int foo(int a, int b, Tree train){ int i,j,mi,m,k; for (i=1; i <= 36; i++){ train.result[i] = train.weight[a][i]; //printf("%d ",train.result[i]); } //printf("\n"); train.mark[a] = 1; for (i=1; i <= 36; i++) { mi = 65535; for (j=1; j <= 36; j++){ //搜寻当前未访问的最短路径(作为下一访问点) if (!train.mark[j] && train.result[j] < mi) { m = j; mi = train.result[j]; } } for (k=1; k <= 36; k++){ //比较(经过当前访问点的距离)与之前最短路径的距离 if (train.result[m] + train.weight[m][k] < train.result[k]) train.result[k] = train.result[m] + train.weight[m][k]; //比之前的则更新 } train.mark[m] = 1; } for (i=1; i <= 35; i++){ //结果输出 printf("%4d ",train.result[i]); } printf("\n"); return train.result[b]+1;}int main(){ string abt[] = {"A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "A11", "A12", "A13", "A14", "A15", "A16", "A17", "A18", "B1", "B2", "B3", "B4", "B5","B6", "B7", "B8", "B9", "B10", "B11", "B12", "B13", "B14", "B15", "T1", "T2"}; char s1[10],s2[10]; int a,b,i; Tree train; init(train); scanf("%s%s",s1,s2); for (i=0; i < 36; i++) { if (strcmp(s1,abt[i].c_str()) == 0) a = i; if (strcmp(s2,abt[i].c_str()) == 0) b = i; } printf("%d %d\n",a+1,b+1); printf("到相对应站的距离:\n"); for (i=1; i <= 35; i++){ printf("%4s ",abt[i-1].c_str()); } printf("\n"); printf("\n最后结果:%d\n",foo(a+1,b+1,train));}
0 0
- 地铁换乘
- 地铁换乘
- 地铁换乘
- 地铁换乘
- 地铁换乘
- 蓝桥杯-地铁换乘
- 蓝桥杯地铁换乘问题
- 蓝桥杯-地铁换乘
- 华为地铁换乘问题
- 地铁换乘C++
- 地铁换乘一次进一步修改。
- 华为机试题-地铁换乘
- 地铁换乘最短路径
- 地铁换乘的线路问题
- 地铁采用一次换乘到达sql
- 最短路径之地铁换乘
- 地铁换乘(华为机试样题)
- 华为笔试题——地铁换乘
- iOS_22自定义键盘工具条
- android Intent练习
- 用VMware做测试是很不明智的选择
- Android音乐播放器---实现Notification控制音乐播放
- 慕课网:1、初识jquery
- 地铁换乘
- 【文件】文件加密(对称加密des算法)
- 第八周总结
- root后adb shell默认不是root用户时,如何将文件放入手机系统中
- LevelDB性能测试
- 二叉树-Binary tree maximum path sum
- android shape的使用
- android Handler UI线程&后台线程通信
- linux终端下,使用ls时,显示的文件颜色,都表示什么含义,在哪里可以查看和修改