北京地铁线路图:
在上一版本中由于时间仓促所以本人没有全部把北京地铁线路写入程序里面,这是第二版本,接下来还有好几个思路和大胆的想法 感兴趣的请关注! 谢谢
现在这一版本已经把北京地铁全部路线已经加载进来了! ////"昌平线","房山线","1","2","4","5","6","8","9","10","13" "15","亦庄线" ,"八通线" 八通线
QA:为什么没加机场线呢 AN:机场线显然是去机场的,平时换乘地铁不至于东直门到三元桥去坐25元的机场线吧 也不太划算! 要是非有人想 后期加进来一样,也不影响现在的思路,
1:
这里我给出程序加载数据的代码:
1 ////"昌平线","房山线","1","2","4","5","6","8","9","10","13" "15","亦庄线" ,"八通线" 八通线 begin 2 b1 = "四惠东"; 3 b2 = "土桥"; 4 len = "16.6"; 5 timem = "29"; 6 SWAP(backlist, ref arry, b1, b2, len, timem); 7 ////"昌平线","房山线","1","2","4","5","6","8","9","10","13" "15","亦庄线" ,"八通线" 八通线 end
以这种方式加载的目的不是因为代码好写而是因为后期还有一定的完善代码 先预留这里 到时候在写入XML文件中程序进行读取,ps(这里的数据来至百度地图,难免存在一点点误差,都说误差是不可避免的!)
这样的数据有很多,这里我给出运行加载数据以及存入到hashtable中的代码和消耗时间:
这是消耗的时间(精确到了毫秒)
2:
因为1的步骤即可进行第二步:
消耗时间:
1 ///时间复杂度比较复杂,因为换乘结点的关系导致的 2 ///最坏情况下(每个站之间都有连线,但是地铁线路图实际上是不存在次情况的):O(2^n) 3 ///相反 4 ///最优情况下(之间只有唯一的连接点,次情况下也不是很现实的,有的地铁换乘是多个换乘点都在同一条线上的) 5 ///此时用hashtable所以是:O(1) 6 HashSet<string> GetF(HashSet<string> beginlist, int i) 7 { 8 if (mainht == null || mainht.Count == 0) return null; 9 HashSet<string> returnlist = new HashSet<string>(); 10 string[] earry = null; 11 if (beginlist.Count == 0) 12 isend = 1; 13 else 14 {22 //move code40 } 41 earry = null; 42 if (isend == 0) 43 return GetF(returnlist, i); 44 else 45 return null; 46 }
地图的递归查询已经完了, 到这里已经差不多了! 后面是取权值, 在下一版本中我会用更加大胆更加高性能的思路给写出来!
这是测试的结果的部分数据:
LoadData begin:20130428161952247
LoadData end:20130428161952247
GetF() begin:20130428161952:247
GetF() end:20130428161952:403
20130428161952559
西二旗------------->国贸:
查看全部数据请点击我
测试结果数据END
从这些方法中看出来了一些问题比如:数据构造还不完善,算法执行时间较长,等等问题!
热烈欢迎大家发表自己的意见和其他! 在下一版本中我会用很大胆的想法写出来改善之前的低效率递归方法!
祝大家五一快乐!
下篇再见!
BY:SF
time: 2013-04-28-16:18