已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量.
来源:互联网 发布:js交换两个变量的值 编辑:程序博客网 时间:2024/04/19 20:26
已知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 B10 T2 B11 B12 B13 B14 B15
利用BFS求最短路径,BFS只适用于无权路径,有权路径很难使用
#include <iostream>#include <string>#include <queue>using namespace std;typedef struct EdgeNode{int adjvex;struct EdgeNode *next;}EdgeNode;typedef struct VertexNode{string data;EdgeNode *first;}VertexNode,AdjList[20];typedef struct Graph{AdjList vertex;int num_vertex;int num_edge;}Graph;int visit[20];int parent[20];int num = 0;int get_location(Graph g, string s){for(int i=0;i<g.num_vertex;i++){if(s == g.vertex[i].data)return i;}return -1;}void create_graph(Graph &g){int i,j,k;string s1,s2;cout<<"请输入结点和边的个数:";cin>>g.num_vertex>>g.num_edge;cout<<"请输入节点:";for(i=0;i<g.num_vertex;i++){cin>>g.vertex[i].data;g.vertex[i].first = NULL;}cout<<"请输入边:"<<endl;for(k=0;k<g.num_edge;k++){cin>>s1>>s2;i = get_location(g,s1);j = get_location(g,s2);EdgeNode *p = new EdgeNode();p->adjvex = j;p->next = g.vertex[i].first;g.vertex[i].first = p;p = new EdgeNode();p->adjvex = i;p->next = g.vertex[j].first;g.vertex[j].first = p;}}void dfs(Graph g, string begin, string end){int start = get_location(g,begin);int stop = get_location(g,end);queue<int> q;memset(visit,0,sizeof(visit));memset(parent,-1,sizeof(parent));visit[start] = 1;parent[start] = -1;q.push(start);while(!q.empty()){int top = q.front();q.pop();EdgeNode *p = g.vertex[top].first;while(p){if(!visit[p->adjvex]){visit[p->adjvex] = 1;parent[p->adjvex] = top;if(p->adjvex == stop) //找到返回return;q.push(p->adjvex);}p = p->next;}}}void print_path(Graph g, int end){if(parent[end] != -1){num++;print_path(g,parent[end]);cout<<"->"<<g.vertex[end].data;}}void print_path(Graph g, string begin, string end){cout<<"最短路径为:"<<endl;cout<<begin<<"->";num++;int j = get_location(g,end);print_path(g,j);cout<<endl;cout<<"最短路径长度为"<<num<<endl;}int main(){Graph g;string begin,end;create_graph(g);cout<<"请输入要找的起始站点:";cin>>begin>>end;dfs(g,begin,end);print_path(g,begin,end);return 0;}
- 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量.
- 华为机试样题解析:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。 编写程序,任意输入两个站点名称,输出最少需要经过的站点数
- 地铁换乘的线路问题
- 关于526路唯一作为东西向接驳地铁2号线的线路延长运营时间更换车型的问题
- 北京市地铁线路及站点数据
- Python告诉我巴黎的地铁线路有多不靠谱!
- Python告诉我巴黎的地铁线路有多不靠谱!
- 苏州地铁线路查询接口 地铁线路实时详细信息
- 深圳地铁要求屏蔽线路 3G 信号
- 用SQL进行地铁线路换乘查询
- 线路
- 线路
- 西北首条 地铁线路:西安地铁二号线 于 2011年9月16日开通运营
- 北京的六条经典徒步线路
- vxWorks中的中断的两条线路
- 华为上机考试样题三----地铁线路换乘问题
- 百度地图API之定位+公交地铁线路导航
- 备份线路的配置
- 解决问题java.lang.ClassCastException: android.app.Application
- JSP 使用<%@include%>报Duplicate local variable path
- 面试经典题目:链表中倒数第k个结点
- FABridge在FireFox中使用出错的问题
- 两则快速git pull push的脚本
- 已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量.
- 将博客搬至CSDN
- Mercurial简介
- 用二维码传输数据方法的设想
- Hadoop学习杂记(三)
- ogg for oracle to ogg for mysql
- python学习笔记之url.urlretrieve
- C语言之排序1
- hdu 2874 Connections between cities 最近公共祖先lca(离线算法/tarjan算法)