华为机试地铁换乘问题
来源:互联网 发布:2014流行网络用语 编辑:程序博客网 时间:2024/04/29 07:35
已知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 地铁线A(直线)经过车站:
B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
输入:输入两个不同的站名
输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次
使用Dijkstra方法,地铁线路存储为图,图用邻接表表示;
#include<utility>#include<iostream>#include<string>#include<cstring>#include<map>#include<vector>using namespace std;map<string,int>zhan;int min(int a,int b){ return a<b?a:b;}int main(void){ const int INF=100; //0-34依次对应A1-A18,B1-B15,T1,T2 for(int i=0;i<9;i++) { string a="A"; char b=i+'1'; a+=b; zhan[a]=i; } for(int i=9;i<18;i++) { string a="A1"; char b=i-10+'1'; a+=b; zhan[a]=i; } for(int i=18;i<27;i++) { string c="B"; char d=i-18+'1'; c+=d; zhan[c]=i; } for(int i=27;i<33;i++) { string c="B1"; char d=i-28+'1'; c+=d; zhan[c]=i; } zhan["T1"]=33; zhan["T2"]=34; string z1,z2; cin>>z1>>z2; int st=zhan[z1],en=zhan[z2];//起点与终点对应的编号 int cost[35][35];//存储各个地跌站间之间的长度,如A1A2间长度为1, //没有连接的点长度为INF,自己与自己之间为零 memset(cost,INF,sizeof(cost)); for(int i=0;i<35;i++) { cost[i][i]=0; } for(int i=0;i<32;i++) { cost[i][i+1]=1; cost[i+1][i]=1; } cost[8][9]=INF; cost[17][18]=INF; cost[22][23]=INF; cost[12][13]=INF; cost[27][28]=INF; cost[0][17]=1; cost[33][8]=1; cost[33][9]=1; cost[33][22]=1; cost[33][23]=1; cost[34][12]=1; cost[34][13]=1; cost[34][27]=1; cost[34][28]=1; cost[9][8]=INF; cost[18][17]=INF; cost[23][22]=INF; cost[17][0]=1; cost[8][33]=1; cost[9][33]=1; cost[22][33]=1; cost[23][33]=1; cost[12][34]=1; cost[13][34]=1; cost[27][34]=1; cost[28][34]=1; int d[35]; bool used[35];//检测是否更新过 int V=35; fill(d,d+V,INF); fill(used,used+V,false); d[st]=0;z//起点距离设为0 while(true) { int v=-1; for(int u=0;u<V;u++) { if(!used[u]&&(v==-1||d[u]<d[v])) v=u; } if(v==-1) break; used[v]=true; for(int u=0;u<V;u++) { d[u]=min(d[u],d[v]+cost[v][u]); } } //换乘站数等于距离+1 cout<<d[en]+1<<endl; return 0;}
0 0
- 华为机试地铁换乘问题
- 华为机试--地铁换乘问题
- 华为地铁换乘问题
- 华为机试题-地铁换乘
- 华为机试 地铁换乘问题(最短路径算法)
- 华为笔试题:地铁换乘问题
- 华为机试—地铁换乘(图文吐血整理)
- 华为机试地铁换乘C++实现(不容易啊)
- 地铁换乘(华为机试样题)
- 华为上机考试样题三----地铁线路换乘问题
- 蓝桥杯地铁换乘问题
- 2014华为机试——地铁换乘寻找最少车站数和排序算法
- 华为机试题(地铁换乘,图的应用)
- 华为机试题——高级题:地铁换乘
- 地铁换乘的线路问题
- 华为笔试题——地铁换乘
- 地铁换乘
- 地铁换乘
- 像三星学习,不得不佩服
- CCParticleBatchNode
- XMPP 开源服务器 Openfire 的安装和配置指南
- SQLAlchemy 使用经验
- 玩转Google开源C++单元测试框架Google Test系列(gtest)(总)
- 华为机试地铁换乘问题
- CCScriptSupport(脚本支持)
- Jwchat 的安装和配置、Service unavailable、Authorization failed问题汇总
- 黑马程序员--学习笔记(IO流一)
- zkw线段树的理解和思考
- 转]Java中HashMap遍历的两种方式
- Doxygen + Graphviz windows下安装配置(图解)
- 支持向量机(SVM)(五)-- SMO算法详解
- 短链接生成算法与MD5生成32位唯一ID算法