华为上机考试样题三----地铁线路换乘问题
来源:互联网 发布:光纤传感仿真软件 编辑:程序博客网 时间:2024/04/19 07:54
////////////////////////////////////////////
//已知两条地铁线路,其中A为环线,B为东西线路,
//两条线路都是双向的,线路的站点名称如下,
//两条线路交叉换乘的站点用T1,T2表示,编写程序
//输入任意两个站点的名称,输出乘坐的最少站点数
//(含输入的站点,换乘站点只记一次)
//A线路:A1,A2,....,A9,T1,A10,...A13,T2,A14,....,A18
//B线路:B1,B2,...,B5,T1,B6,...,B10,T2,B11,B12,...,B15
////////////////////////////////////////////
注:本程序在VC++6.0环境下编译通过并且能正确运行,
本博主原创,转载请注明出处,谢谢!
/////////////////////////////////////////////////////////////////////////////////////////////////////
#include<iostream>
#include<string>
using namespace std;
#define abs(a) ((a)>0?(a):-(a))
#define min(a,b) ((a)<(b)?(a):(b))
int beyound(const string Aline[],const string Bline[],const string sp,int lenA,int lenB)
{
int temp=0; //返回1则是Aline上的站点
for(int i=0;i<lenA;i++) //返回2则是Bline上的站点
{
if(sp==Aline[i])
{
temp=1;
break;
}
if(i<lenB&&sp==Bline[i])
{
temp=2;
break;
}
}
return temp;
}
int distance(const string Aline[],const string Bline[],const string p1,const string p2,int lenA,int lenB)
{
string t1="T1",t2="T2";
int a1=0,a2=0,i;
int adr1,adr2,dis;
int mina1,mina2,minb1,minb2;
a1=beyound(Aline,Bline,p1,lenA,lenB);
a2=beyound(Aline,Bline,p2,lenA,lenB);
if(a1==a2)
{
if("T1"==p1&&"T2"==p2||"T1"==p2&&"T2"==p1) //两个最特殊的点,两点都在交点处
return 6;
if(1==a1) //同在A线路上
{ for(i=0;i<lenA;i++)
{
if(p1==Aline[i])
adr1=i;
if(p2==Aline[i])
adr2=i;
}
dis=min(abs(adr1-adr2),20-abs(adr1-adr2))+1;
}
if(2==a1) //同在B地铁线路上
{ for(i=0;i<lenB;i++)
{
if(p1==Bline[i])
adr1=i;
if(p2==Bline[i])
adr2=i;
}
dis=abs(adr1-adr2)+1;
}
return dis;
}
else
{
if(1==a1) //Point1在A地铁线路上,Point2在B地铁线路上
{ for(i=0;i<lenA;i++)
{
if(p1==Aline[i])
{
adr1=i;
break;
}
}
for(i=0;i<lenB;i++)
{
if(p2==Bline[i])
{
adr2=i;
break;
}
}
}
else //Point2在A地铁线路上,Point1在B地铁线路上
{
for(i=0;i<lenA;i++)
{
if(p2==Aline[i])
{
adr1=i;
break;
}
}
for(i=0;i<lenB;i++)
{
if(p1==Bline[i])
{
adr2=i;
break;
}
}
}
mina1=min(abs(adr1-9),20-abs(adr1-9));
minb1=abs(adr2-5)+1;
mina2=min(abs(adr1-13),20-abs(adr1-13));
minb2=abs(adr2-10)+1;
dis=min((mina1+minb1),(mina2+minb2));
return dis;
}
}
int main()
{
string Aline[20]={"A1","A2","A3","A4","A5","A6","A7","A8","A9","T1",
"A10","A11","A12","A13","T2","A14","A15","A16","A17","A18"};
string Bline[17]={"B1","B2","B3","B4","B5","T1","B6","B7","B8","B9",
"B10","T2","B11","B12","B13","B14","B15"};
string Point1,Point2;
int dist,cycle=1,be1,be2;
while(cycle)
{
cout<<"please input two stand piont: ";
cin>>Point1>>Point2;
be1=beyound(Aline,Bline,Point1,20,17);
be2=beyound(Aline,Bline,Point2,20,17);
if(!(be1&&be2)) {cout<<"stand point not belong two line,please reinput again!"<<endl; continue;}
cout<<"Point1: "<<Point1<<" Point2: "<<Point2<<endl;
dist=distance(Aline,Bline,Point1,Point2,20,17);
cout<<"two stand point min distane is: "<<dist<<endl;
cout<<"Do you want to test continue('1' continue/'0' quit)?";
cin>>cycle;
}
return 0;
}
- 华为上机考试样题三----地铁线路换乘问题
- 地铁换乘(华为机试样题)
- 华为2014上机考试样题_高级题_地铁换乘最短路径_无向无权图+邻接表存储+BFS广度优先算法
- 华为2014上机考试样题_高级题_地铁换乘最短路径_无向无权图+邻接表存储+BFS广度优先算法
- 地铁换乘的线路问题
- 华为地铁换乘问题
- 华为笔试题:地铁换乘问题
- 地铁换乘—华为2014校招机试样题 —Dijkstra 和 Floyd-Warshall 算法解决
- 华为机试地铁换乘问题
- 华为机试--地铁换乘问题
- 华为笔试题——地铁换乘
- 华为公司2014届校园招聘软件类上机考试样题
- 华为公司2014届校园招聘软件类上机考试样题 粤港澳
- 华为公司2014届校园招聘软件类上机考试样题
- 华为公司2014届校园招聘软件类上机考试样题
- 华为公司2014届校园招聘软件类上机考试样题
- 华为公司2014届校园招聘软件类上机考试样题
- 华为公司2014届校园招聘软件类上机考试样题
- ios 学习登陆密码AES 加密
- Red5性能测试
- SQL server 2005主键序列自动增长问题
- could not change executable permissions on the application.
- APUE_管道
- 华为上机考试样题三----地铁线路换乘问题
- java垃圾回收那点事(四)谁执行了GC的任务
- 新浪微博想把私信变成微信
- Weka Experimenter(实验者界面) 简解
- 生成正态随机分布数
- Red5流媒体服务器的安装与测试
- js 省市 二级 联动
- codeforces 19D Points
- Linux/Unix Fork与Exec使用