程序说明:

这个项目是记录地铁线路并且加以计算,所以储存线路是其中的关键部分。

经过慎重的思考以及选择,最后决定采用链表的形式储存整个地图,因为地图的站点分布不均匀,采用邻接矩阵很不合适无法对齐,这样的方式也比邻接链表要方便。

最终的储存结构中,每个站点都有一个单独的station对象,并且储存了相关的信息,站与站之间按照线路排列,每一条线路的起点被专门放在一个数组里面方便访问。

问题地址:http://www.cnblogs.com/jiel/p/5852591.html

输入文件说明:

保存的文件(beijing-subway.txt)里面都是中文,按照一行线路名一行该线路下所有站点名的方式排列,将所有的线路中的站点都这样排列在其中。如果是环线,则在线路行最后加上”CIRCLE”标识,如果是单行线,则在对应位置加上”ONEWAY”来标识。地铁路线名已经给好(请勿随便修改,线路名称以及数量不能变动 这样才能有效识别)

其他:

对于一般的错误命令行或者错误文件可以正确识别并且处理

代码分析工具的Warning都已经消除(是由于文件输入顺序不确定造成的潜在风险)

优化记录:

初始性能(样例 公主坟-公益西桥)

初步改进之后:

最终结果:

可以看到最初的代码运行效率极低,很多地方重复的比较严重。最初最大的问题就是GetName方法调用过于频繁,首先得做法是在集中调用的地方调用一次并且储存起来,以后就不需要重复调用这个方法。此外针对路线储存方式做出了极大的优化: 本来是在站点类里加入一个字符串属性专门用来储存线路,但这样导致每次访问都会更改,尤其在广度优先遍历的情况下更为严重。后来的优化方法是去除掉所有与存储路线相关的内容,改为最后得出结果后由目的地出发回溯得出所经历的路线,效果显著。

性能分析如上图所示,注意最后一张是采用检测的方法而非一般的CPU采样(因为CPU采样在某一时间段忽然开始鬼畜的一直显示“没有可用的调用树数据”)所以这种检测对于时间的影响非常的大。但是实际运行还是很快的。

程序测试:

1.      –b 南邵 天宫院

2.      –c 巴沟 十里河

3.      –b 2号航站楼 3号航站楼

4.      –c 大钟寺 柳芳

5.      –b 北京西站 望京西

6.      –c 北京西站 望京西

7.      –c 公主坟 五道口

8.      –b 2号航站楼 义和庄

9.      –b 公主坟 公益西桥

10.   -c 公主坟 公益西桥

11.   –b 焦化厂 亦庄火车站

12.   –b 清华东路西口 上地

13.  –b 五道口 五道口

测试结果 均已经通过

这个测试用例相对比较全面,涉及了单行线、线路终点、各种换乘可能性、环线、起始终点相同等各种情况。(异常输入测试没有在这里体现)

模块开发耗时预计:

PSP 2.1

Personal Software Process Stages

Time

Planning

计划

· Estimate

· 估计这个任务需要多少时间

10m

Development

开发

· Analysis

· 需求分析 (包括学习新技术)

1h

· Design Spec

· 生成设计文档

1h

· Design Review

· 设计复审 (和同事审核设计文档)

30m

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

10m

· Design

· 具体设计

2h

· Coding

· 具体编码

3h

· Code Review

· 代码复审

1h

· Test

· 测试(自我测试,修改代码,提交修改)

1h

Reporting

报告

· Test Report

· 测试报告

1h

· Size Measurement

· 计算工作量

30m

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

10m

合计

11.5h

实际模块开发耗时:

PSP 2.1

Personal Software Process Stages

Time

Planning

计划

· Estimate

· 估计这个任务需要多少时间

10m

Development

开发

· Analysis

· 需求分析 (包括学习新技术)

1.5h

· Design Spec

· 生成设计文档

0h

· Design Review

· 设计复审 (和同事审核设计文档)

10m

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

10m

· Design

· 具体设计

1h

· Coding

· 具体编码

3h

· Code Review

· 代码复审

3h

· Test

· 测试(自我测试,修改代码,提交修改)

3h

Reporting

报告

· Test Report

· 测试报告

1h

· Size Measurement

· 计算工作量

0

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

10m

合计

12h10m

收获:

  1. 学习了VS代码分析工具的使用,真的非常的强大以及有用,也让我顺利的找到的代码的性能瓶颈并且可以直接做出针对性的优化(除了鬼畜的采样分析)
  2. 提高了编码的能力,尤其是在优化的过程中,可以不断的发现自己之前代码中的不足,并且相处更优的算法。
  3. 提高了系统开发软件的能力:虽然这次只是一个很小的系统,但是流程却非常的完整,从前期的准备思考规划预计,到代码的实际编写以及调试,中间穿插着与其他人的交流沟通,到对自己作品的改进直到最后的成品的产生。这一流程非常真实的模拟了实际开发过程,为我们以后的工作积累了经验。

转载于:https://www.cnblogs.com/MurryK/p/Beijing_Subway_system.html

北京地铁线路规划程序相关推荐

  1. 北京地铁线路中心计算机系统,北京地铁DT—1型计算机联锁系统

    "北京地铁DT-1型计算机联锁系统研制"集信号联锁.计算机.网络通信和数字信号处理等先进TRANBBS技术于一体,可在TRANBBS城市快速轨道TRANBBS交通新线建设和旧线改造 ...

  2. c++实现北京地铁线路查询系统

    //使用前将bgstations.txt(文件的内容在代码末尾)放在与cpp文件的同一位置 #include<stdio.h> #include<string.h> #incl ...

  3. java地铁线路规划_地铁线路规划——简单分析

    计算地铁线路最短路径 我们要将地铁线路信息等用一个文本文件的形式保存起来,应保存的信息应包括地铁线路名称.各个地铁站点的名称以及车站换乘信息,使得应用程序可以通过读取这个文件,就能掌握关于北京地铁线路 ...

  4. 图的最短路径java_地铁线路最短路径(JAVA实现)

    项目综述 提供一副地铁线路图,计算指定两站之间最短(最少经过站数)乘车路线:输出指定地铁线路的所有站点.以北京地铁为例,地铁线路信息保存在data.txt中,格式如下: 地铁线路总数 线路名1 站名1 ...

  5. 个人项目-地铁出行线路规划程序

    欢迎大家关注我们的软工团队:http://www.cnblogs.com/Default1406/ PSP表格 PSP 2.1 Personal Software Process Stages Pla ...

  6. oracle多条数据合并成一条_建议将北京地铁13-B线和28号线合并成一条线

    由于之前北京地铁规划的28号线是一条核心区市区短线,长度仅为9公里.而地铁作为轨道交通应该是优先承担长距离乘客运输任务,可以说不到万不得已,最好不要规划这样的过短线路.又因为地铁13号线拆分后,拆分后 ...

  7. 183条地铁线路,3034个地铁站,发现中国地铁名字的秘密。

    作者 | 小F 来源 | 法纳斯特 最近看了新周刊的一篇推送,有关地铁名字的分析,链接如下. 我们分析了3447个地铁站,发现了中国城市地名的秘密 于是乎也想着自己去获取数据,然后进行分析一番. 当然 ...

  8. 基于svg绘制北京地铁图(官网数据来源)

    北京地铁图 北京地铁图,基于svg开发,支持PC.移动端多种浏览器. 线上开源地址 https://github.com/StavinLi/beiJingSubway 点个赞吧! 项目介绍 技术点 1 ...

  9. 运用BFS算法实现北京地铁路线换乘系统

    本文通过我做过的一个小项目来分享一下如何通过BFS搜索算法实现北京地铁换乘路线.搜索的规则分别为最短距离与最少换乘线路.BFS算法的原理这里就不讲了,推荐一个B站的视频,对搜索算法讲解的很清晰: BF ...

  10. java实现北京地铁换乘

    文章目录 项目GitHub地址 文件存放 station.txt 设计思路与模块分析 Station.java DataBuilder.java StationIncludeLineName.java ...

最新文章

  1. 人脸检测--Grid Loss: Detecting Occluded Faces
  2. FPGA设计中MEMORY型数据怎么综合到blockRAM里面
  3. python graphics画圆_求高手解答·· graphics画圆出现报错!
  4. 【PD】PowerDesigner生成数据字典
  5. 第四章:Spring AOP
  6. 马上工作了,想问下要注意哪些问题?
  7. 罗永浩欲直播带货,京东说可以帮忙联系
  8. 在visual studio2015中使用easyX画图
  9. Atitit 日志分析与方法调用链 发出命令与接收,,接收使用缩进一格来。。。 方法闭合 使用notepad++选中字符串模式单词。。所以 cls_mthd 模式的输出,来确定一个具体命令。
  10. sqlplus登录指定服务器,sqlplus 指定数据库
  11. linux优化ssd磁盘,Ubuntu下针对ssd硬盘优化
  12. 爱剪辑显示服务器繁忙,爱剪辑视频卡顿怎么回事 爱剪辑视频卡顿解决方法
  13. (更新)视频设备通过rtsp接入amazon alexa echo show
  14. go kafka 配置SASL认证及实现SASL PLAIN认证功能
  15. 骑士amp;魔法 java_程序员穿越异世界,骑士与魔法!
  16. 流氓软件强夺用户数据,马斯克截胡扎克伯格!
  17. Echelon/艾美捷——脂质与蛋白质相互作用的研究
  18. KDevelop详细Debug教程
  19. python数据分析可视化
  20. 新消息,江苏南通8MW屋顶光伏发电啦

热门文章

  1. git merge fast-forward squash no-ff
  2. 各向异性元件中的偏振效应
  3. 博弈论——完全信息博弈
  4. 从头学计量-中介效应理论介绍
  5. 华为网络设备SSH连接
  6. Vue学习之vue-cli脚手架下载安装及配置
  7. 记录下docker命令
  8. 【软件测试】如何抓取崩溃的log日志
  9. 今日头条推荐算法相关博客集合
  10. Data Driven Modeling 课程