图的应用—最短路径问题
用迪杰斯特拉算法解决 《地铁换乘问题》
代码是在我学习的过程中完成的,也许会有问题,希望大家批评指正。
题目:
描述:已知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
输入:输入两个不同的站名
输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次

#include<stdio.h>
#include<string>
#include<string.h>
#include<iostream>
#define inf 100;using namespace std;typedef struct graph
{string top[40];int arc[40][40];int numtop;int numarc;
};
graph g;int loca(graph g,string s)
{for(int i=0;i<35;i++){if(g.top[i]==s) return i;}return -1;
}int main()
{int i,j;//s初始化图g.top[0]="A1";g.top[1]="A2";g.top[2]="A3";g.top[3]="A4";g.top[4]="A5";g.top[5]="A6";g.top[6]="A7";g.top[7]="A8";g.top[8]="A9";g.top[9]="T1";g.top[10]="A10";g.top[11]="A11";g.top[12]="A12";g.top[13]="A13";g.top[14]="T2";g.top[15]="A14";g.top[16]="A15";g.top[17]="A16";g.top[18]="A17";g.top[19]="A18";g.top[20]="B1";g.top[21]="B2";g.top[22]="B3";g.top[23]="B4";g.top[24]="B5";g.top[25]="B6";g.top[26]="B7";g.top[27]="B8";g.top[28]="B9";g.top[29]="B10";g.top[30]="B11";g.top[31]="B12";g.top[32]="B13";g.top[33]="B14";g.top[34]="B15";////初始化邻接矩阵///////////////////////////////////////////////////////////////////////////for(i=0;i<35;i++){for(j=0;j<35;j++){if(i==j) g.arc[i][j] = 0;else if(abs(i-j)==1) g.arc[i][j] = 1;else g.arc[i][j] = inf;}}g.arc[24][25]=inf;g.arc[25][24]=inf;g.arc[29][30]=inf;g.arc[30][29]=inf;g.arc[9][24]=1;g.arc[9][25]=1;g.arc[24][9]=1;g.arc[25][9]=1;g.arc[14][29]=1;g.arc[14][30]=1;g.arc[29][14]=1;g.arc[30][14]=1;/////////输入起点终点/////////////////////////////////////////////////////////////////////////string s1,s2;cin>>s1>>s2;int qi = loca(g,s1);int zh = loca(g,s2);////////迪杰斯特拉算法/////////////////////////////////////////////////////////////////////////int visit[35];//是否在集合s标志memset(visit,0,sizeof(visit));///////////////////////////////////////int dist[35];//每一点到起点的最短距离int loc;int path[35];//路径中每个点的前一个点for(i=0;i<35;i++){dist[i]=g.arc[qi][i];}/////////////////////////////////////visit[qi]=1;//起点int flag=2;//int flag1=0;////////找到最短的点///////////////////////////////////////////////////////////////////////////for(j=1;j<35;j++)//循环34次;把所有节点都放到集合S中{int min=inf;for(i=0;i<35;i++){if((visit[i]==0)&&(dist[i]<min)){ min=dist[i];loc=i;}}if(loc==zh) break;visit[loc]=1;flag++;////////更新dist数组///////////////////////////////////////////////////////////////////////for(i=0;i<35;i++){if((visit[i]==0)&&(min+g.arc[loc][i]<dist[i])) { dist[i]=min+g.arc[loc][i];path[i]=loc; }}}cout<<flag;return 0;
}

图的应用---最短路径问题 用迪杰斯特拉算法解决 《地铁换乘问题》相关推荐

  1. 迪杰斯特拉算法-西安地铁最短路线问题

    文章说明 图是一种较线性表和树更为复杂的数据结构,在各个领域都有着广泛的应用,如城市交通.电路网络分析.交通灯的设置等,其中,最短路径问题的求解是日常生活中最为常见的问题.在现实生活和生产实践中,有许 ...

  2. 图的最短路径之(迪杰斯特拉算法)python实现

    前面我们已经了解到了无环有向图怎样求关键路径的方法,今天我们来看看无向图怎样求最短路径,这在实际应用过程中的作用很大,不如交通路线图,从出发点到终点,走哪条路用时最短,或者花费最少等问题. 我们先来看 ...

  3. 单源最短路径-Dijkstra(迪杰斯特拉算法)

    迪杰斯特拉算法时间复杂度为O(n^2),其中n为顶点个数. 该算法用于求单源最短路径.并且图中的边不允许带负权值. #include <iostream> using namespace ...

  4. 最短路径之Dijkstra(迪杰斯特拉)算法(无向图)

    简介      Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.由for循环可知,其时间 ...

  5. python写算法求最短路径,Python实现迪杰斯特拉算法并生成最短路径的示例代码

    def Dijkstra(network,s,d):#迪杰斯特拉算法算s-d的最短路径,并返回该路径和代价 print("Start Dijstra Path--") path=[ ...

  6. 用迪杰斯特拉算法实现地铁的站点搜索

    上一篇文章,利用迪杰斯特拉(dijkstra)算法,实现了无向图的最短路径搜索功能.本篇将以南京地铁为例,用迪杰斯特拉算法实现两个站点之间的最短路径搜索. 借用百度百科,南京2015年4月份的地铁运行 ...

  7. hdu3790最短路径问题(迪杰斯特拉算法+详解+代码)

    最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  8. 迪杰斯特拉算法c语言6,C语言迪杰斯特拉实现最短路径算法.doc

    数据结构课程设计报告 ----旅游咨询系统设计 目录 一.需求分析- 2 - 二.系统分析- 2 - 三.概要设计- 3 - 一.系统划分- 3 - 二.邻接矩阵建立流程图:- 3 - 三.迪杰斯特拉 ...

  9. 迪杰斯特拉算法c语言要点,C语言迪杰斯特拉实现最短路径算法要点.doc

    C语言迪杰斯特拉实现最短路径算法要点.doc 数据结构课程设计报告 ----旅游咨询系统设计 目录 一.需求分析- 2 - 二.系统分析- 2 - 三.概要设计- 3 - 一.系统划分- 3 - 二. ...

最新文章

  1. 为什么「反向传播」一定要在生物学上有对应?
  2. 网络:窗口控制下的重发机制、流量控制
  3. 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
  4. linux下mtr命令,如何使用Linux mtr命令
  5. linux内核模块实验,linux内核模块实验(2学时).doc
  6. 「 Luogu P2574 」 XOR的艺术——线段树
  7. 科学解释成功者成功的秘诀
  8. java 单链表是否有环,判断链表中是否有环
  9. 1过程流程图 3 apqp_干货 | APQP过程流程图及最新版全套表格汇总,收藏备用!
  10. Spark Conf配置用法
  11. Servlet+jsp入门教程
  12. 原创度检测工具-免费原创度检测软件-在线伪原创免费工具
  13. pdf拆分成一页一页
  14. 助你迈向成功之路的二十二个好习惯
  15. Python批量处理lrmx格式文档内指定内容
  16. matlab ode45例子,matlab的ode45
  17. 密码学之恺撒加密(03)
  18. 程序员外包接单网站记录
  19. 找到的一个关于银行的介绍
  20. 贯入用计算机怎样换算,标准贯入试验应用和其杆径换算探究.doc

热门文章

  1. 如何对物料的批次进行管理?
  2. 看过来!2021年最新PMP报名流程来了
  3. cocos2dx3.3在Win7(64位)上Android开发环境搭建(提要)
  4. 适合程序员的耳机_有没有适合程序员打代码时用的耳机推荐?
  5. 性能监控工具的配置及使用 - 听云-Server
  6. Matlab修改Consolas字体
  7. C++音频单声道、双声道之间的转换
  8. HDLC协议的特点及功能,让你一看就会
  9. SAE J1708协议
  10. 1.2 Qt Creater使用Python开发桌面软件的界面设计