华为机试--地铁换乘问题

2023-12-20 11:18

本文主要是介绍华为机试--地铁换乘问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:

描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B1!0 T2 B11 B12 B13 B14 B15

输入:输入两个不同的站名

输出:所经过的站数及站的名称


其实分析问题就会发现,这是一个求最短路径的问题,是图算法的里面比较基础的。常见的求路径的有A星,Dijkstra算法,floyd算法等,由于研究的不深入,就不细谈了。floyd算法可参考http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html。

#include <iostream>
#include <string>
#include <stack>
using namespace std;
#define  inf 1000   //定义无穷远距离
#define  stationNum 35  //总的站台个数
string station[stationNum]={"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"} ; 
int string_To_int(string st);void Ford(int distance[][stationNum],int path[][stationNum]);int staNUm(int dis[][stationNum],int path[][stationNum],string start,string destination);void main()
{int path[stationNum][stationNum];int distance[stationNum][stationNum];Ford(distance,path);string start,des;cin>>start>>des;cout<<staNUm(distance,path,start,des);
}
int string_To_int(string st)
{for (int i=0;i<stationNum;i++){if (station[i]==st){return i;}}}void Ford(int distance[][stationNum],int path[][stationNum]){//距离矩阵初始化其中相邻两项边是联通的,其他边之间都是不通的for (int i=0;i<stationNum;i++){for (int j=0;j<stationNum;j++){if (i==j) distance[i][j]=0;else distance[i][j]=inf;}}int lineA[20]={0,1,2,3,4,5,6,7,8,33,9,10,11,12,34,13,14,15,16,17};int lineB[17]={18,19,20,21,22,33,23,24,25,26,27,34,28,29,30,31,32};for (int i=0;i<19;i++){distance[lineA[i]][lineA[i+1]]=1;distance[lineA[i+1]][lineA[i]]=1;}for (int i=0;i<16;i++){distance[lineB[i]][lineB[i+1]]=1;distance[lineB[i+1]][lineB[i]]=1;}//初始化pathfor (int i=0;i<stationNum;i++){for (int j=0;j<stationNum;j++){path[i][j]=i;}}for (int k=0;k<stationNum;k++)//注意K的位置!!!!{for (int j=0;j<stationNum;j++){for (int i=0;i<stationNum;i++){if (distance[i][j]>distance[i][k]+distance[k][j]){distance[i][j]=distance[i][k]+distance[k][j];path[i][j]=path[k][j];}}}}}int staNUm(int dis[][stationNum],int path[][stationNum],string start,string destination){int s=string_To_int(start);int d=string_To_int(destination);//因为path[i][j]存的是最后到达j的前一个站点,所以我们要输出路径,就要从后往前遍历path。存放在stack中,最后依次输出即可stack<int> s_stack;for (int i=0;i<stationNum;i++){for (int j=0;j<stationNum;j++){if (i==s&&j==d){ int k=j;do {k=path[i][k];s_stack.push(k);} while (k!=i);cout<<station[s_stack.top()];s_stack.pop();while (!s_stack.empty()){cout<<"->"<<station[s_stack.top()];s_stack.pop();}cout<<"->"<<station[j];cout<<endl;return dis[i][j]+1;}}}}

代码运行结果如下;


本文参考http://blog.csdn.net/qinhl060343/article/details/37819345

这篇关于华为机试--地铁换乘问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/515835

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例