zoukankan      html  css  js  c++  java
  • 【软工个人项目-地铁出行路线规划程序】

    1.源代码地址:https://github.com/qiao1406/BeijingSubway

     使用的语言:C++

     编程环境:Visual Studio 2015/Windows 8 64-bit 虚拟机(ps:自己的电脑上死活装不成功世界上最好的IDE,只好装在虚拟机上了

    2.PSP表格-计划时间与实际花费时间

    3.测试样例

    具体详见GitHub,这里贴几个帮助我改正了bug的样例

    3.1 -b 苹果园 土桥

     1号线和八通线的换乘模式是【双换乘】即:四惠和四惠东这两个站是同时属于一号线和八通线的,而根据我之前写的判断换乘的算法从【苹果园】-【土桥】在经过这两个站的时候没有输出换乘的信息,我原先的算法是根据连续的三个站是否在同一条线上来判断的,这样的判断方式对于其他的站点来说都是适用的,然而在这里,由于【四惠】、【四惠东】、【高碑店】都属于八通线,所以之前的判断方式不对,这里应该要有四个站来判断,所以,我根据这一特殊的情况,使用了【高碑店】、【大望路】两个站来判断【1号线】和【八通线】的换乘,修正了bug

    3.2 -c 丰台东大街 泥洼

    当选择以换乘最少原则的时候,从丰台东大街到泥洼的方案是坐到六里桥倒10号线,而原先的算法在判断换乘的时候是在到达【西局】的时候判断其和【六里桥】和【七里庄】是否在一条线上,然而这个奇妙的三角形上的三个站居然是两两共线的,所以之前的判断方式就失效了,于是我针对这一特殊情况增加的新的判断代码,有点类似于3.1中的方式,于是这个bug也修复了

    3.3 -c 知春路 北京南站

    按照换乘最少的原则,从【知春路】到【北京南站】的最佳方案是从【知春路】上车坐13号线到【西直门】换4号线,换乘1次 

    然而有另外一种换乘1次的方案:坐10号线到【角门西】再倒4号线,我的程序最先找到的是第二种方案,因为我最先的算法是只要找到了换乘最小的方案立即停止寻找,没有考虑到距离的因素,于是我的改进是增加了对每次换乘最小的方案进行距离的测算,在满足最小换乘原则的先决条件下,优先选择距离最短的那个方案

    4.性能改进

    4.1性能分析图

    在改进性能之前我的程序中消耗cpu资源最多的是getStationIndex(string name)这个函数,它的代码如下,它的作用是遍历车站的数组,寻找到车站名称和name相同的那个,并且返回那个车站的下标值,若不存在则返回-1

    int getStationIndex(string name) {
    	int rst = -1;
    
    	for (int i = 0; i < st_num; ++i) {
    		if (st_arr[i].name == name) {
    			rst = i;
    			break;
    		}
    	}
    
    	return rst;
    
    }
    

     我改进这个函数的方式:用map<string,int>来存储<车站名,下标>的键值对,然后要得到下标的时候直接可以返回

    4.2 改进后的性能分析图

    效果显著,占用的百分比从32降到了7

    5 个人所得

    5.1 这是我第一次写C++的程序,而且规模还不小,代码总行数大概有7、800行吧,刚开始因为不太了解这个语言,所以踩了挺多坑的,但是经过查阅C++相关的书籍以及在网上查找了一些有关C++的资料之后,这些问题都得到了很好的解决

    5.2 这一次也是我第一次使用Visual Studio 2015来编码,虽然它难装难卸还经常卡死,但我知道它是个好IDE

    5.3 当一个程序写出来之后不能就不管了,因为你只是对它进行了简单的测试,并不能认为它就是完美无缺的,后期的维护及其重要

  • 相关阅读:
    强制类型转换
    《thinking in java》 接口与内部类
    JAVA强制类型转换(转载+自己的感想)
    Java 面试题问与答:编译时与运行时
    Java注解处理器
    Java反射详解
    BZOJ5072:[Lydsy1710月赛]小A的树(树形DP)
    BZOJ4987:Tree(树形DP)
    BZOJ3791:作业(DP)
    BZOJ1972:[SDOI2010]猪国杀(模拟)
  • 原文地址:https://www.cnblogs.com/Ecqiao/p/5878354.html
Copyright © 2011-2022 走看看