华为机试样题解析:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。 编写程序,任意输入两个站点名称,输出最少需要经过的站点数
来源:互联网 发布:web数据挖掘毕设课题 编辑:程序博客网 时间:2024/04/19 21:08
#include "stdafx.h"#include <iostream>#include <assert.h>#include <string>#include <stdio.h>#include <stdlib.h>#include <memory.h>using namespace std;typedef int PATH[35][35];typedef int VERTEX[35][35];const int NIF = 65535;typedef struct {int (*arc)[35];int NumVertexes;}Graph; //定义const char *RouteTable[35]={"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"}; //路径表void ShortestPath_Floyd(Graph *pGraph,PATH *path,VERTEX *vertex) //最短路径算法,可以得到最短路径的路径长度和路径{int i,j,k;for (i=0;i<pGraph->NumVertexes;++i){ for (j=0;j<pGraph->NumVertexes;++j) { (*path)[i][j] = pGraph->arc[i][j];//将原图复制给path (*vertex)[i][j]= j; //初始化顶点矩阵 }}for (k=0;k<pGraph->NumVertexes;++k){ for (i=0;i<pGraph->NumVertexes;++i) { for (j=0;j<pGraph->NumVertexes;++j) { if ((*path)[i][j]>(*path)[i][k]+(*path)[k][j]) { (*path)[i][j] = (*path)[i][k]+(*path)[k][j]; (*vertex)[i][j] = (*vertex)[i][k]; } } }}}void Route_path_show(int path[][35],int vertex[][35],int start,int end) //显示函数{ int k = vertex[start][end]; cout<<"最少所经过的站点数: "<<path[start][end]+1<<endl; cout<<"所经路径 : "<<RouteTable[start]<<"->"; while (k!=end) { cout<<RouteTable[k]<<"->"; k = vertex[k][end]; } cout<<RouteTable[end]<<endl;}void GraphCreat(Graph **pGraph,int arc[][35]) //根据题意创建连接图{ int i,j; for (i=0;i<35;++i) { for (j=0;j<35;++j) { if(i==j) arc[i][j] = 0; else arc[i][j] = NIF; } } (*pGraph)->NumVertexes = 35; int a[]={1,2,3,4,5,6,7,8,9,34,10,11,12,13,35,14,15,16,17,18,1};//环线 int b[]={19,20,21,22,23,34,24,25,26,27,28,35,29,30,31,32,33}; //T1:34,T2:35 int length_a = sizeof(a)/sizeof(a[0]); int length_b = sizeof(b)/sizeof(b[0]); for (i=0;i<length_a-1;++i) { arc[a[i]-1][a[i+1]-1]=1; arc[a[i+1]-1][a[i]-1]=1;//初始化A路线连接矩阵,权重都为1 } for (i=0;i<length_b-1;++i) { arc[b[i]-1][b[i+1]-1]=1; arc[b[i+1]-1][b[i]-1]=1;//初始化B路线连接矩阵,权重都为1 } (*pGraph)->arc = arc;}int char_to_num(char *str){ int i=0; while (i<35) { if (strcmp(str,RouteTable[i])==0) { return i; break; } ++i; }}int _tmain(int argc, _TCHAR* argv[]){ Graph *pGraph = new Graph; int arc[35][35]; GraphCreat(&pGraph,arc); int path[35][35]; int vertex[35][35]; ShortestPath_Floyd(pGraph,&path,&vertex); char input[100]; char *pInput = input; char *mid,*low,*high; char start[10],end[10]; int begin,stop; while (1) { cout<<"******************************************************************************"<<endl; cout<<"请输入起点和终点.格式:[A1,A2]"<<endl; cout<<"输入范围:"<<"A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 A16 A17 A18 B1 B2 B3 "; cout<<"B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 T1 T2"<<endl; cin>>input; pInput = input; if (strcmp(pInput,"q")==0) break; else { while (*pInput!=']') { if(*pInput=='[') low = pInput+1; if (*pInput==',') mid = pInput; ++pInput; } high = pInput-1; memcpy(start,low,mid-low); start[mid-low]='\0'; memcpy(end,mid+1,high-mid); end[high-mid]='\0'; begin = char_to_num(start); stop = char_to_num(end); Route_path_show(path,vertex,begin,stop); } } delete pGraph; system("pause"); return 0;}
0 0
- 华为机试样题解析:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。 编写程序,任意输入两个站点名称,输出最少需要经过的站点数
- 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量.
- 地铁换乘的线路问题
- 华为上机考试样题三----地铁线路换乘问题
- 北京市地铁线路及站点数据
- 关于526路唯一作为东西向接驳地铁2号线的线路延长运营时间更换车型的问题
- 百度地图-获取一条公交上的所有站点 获取两站直接的线路
- 【数学建模集训系列】公交查询系统的matlab实现-公交站点和线路对应矩阵
- 用SQL进行地铁线路换乘查询
- 给定两个站点,如果没有直达的路线,如何找到换乘次数最少的路线?
- 备份线路的配置
- 最佳飞机换乘线路查询系统的实现
- 厦门市各中巴线路途经站点
- 【实用】齐齐哈尔市公交车线路站点汇总
- 北京的六条经典徒步线路
- vxWorks中的中断的两条线路
- ExpressRoute 线路的虚拟网络数
- Python告诉我巴黎的地铁线路有多不靠谱!
- 字符串搜索算法之Sunday
- MigLayout布局管理器的使用
- ofbiz调试及调试配置
- ArrayList Vector LinkedList 区别与用法
- (无限级、非递归)树形分类
- 华为机试样题解析:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。 编写程序,任意输入两个站点名称,输出最少需要经过的站点数
- 11111111111
- 简单读取输入输出流DEMO
- 二叉树基本操作
- 阿里巴巴2014笔试题及答案(9月22北京)
- uva 11724 Evaluate the Expression
- WP ListBox 遍历DataTemplate(获取所有控件)
- 银行风险资料整理
- Ubuntu 更改文件夹及子文件夹权限