版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录模糊查询;线路查询;最少换乘;最短路径datastructure;fuzzylookup;buslinequery;leasttransfer;shortestpath城市公共交通是与人民群众生产生活息息相关的重要基础设施,公共交通系统是城市交通系统的重要组成部分。随着城市化进程的加快、城市经济的繁荣、城市居民出行次数增加,优先发展城市公共交通,提高乘坐公交出行人数的比例,深挖交通资源利用效率,成为缓解交通拥堵的重要手段。而且随着移动互联网业务的爆炸式增涨,人们开始倾向于利用网络解决生活中遇到的问题,从网络中寻找答案,所以公交线路查询系统应运而生,人们开始利用公交查询系统查找出行的公交线路,为市民的出行提供便利。开发一个公交线路查询系统,便于市民了解公交信息,合理安排出行。出行人员可以最快时间查到想要的准确站点信息和线路信息。可以进行模糊站点查询。为城市居民和外地游客搜索站点提供一条或若干条快速、经济的经过该点的线路选择,极大方便了人们的社交活动。随着计算机普及应用于各个行业领域,也有许多国外致力于研究计算机各种应用技术的学者专家们将目光放在交通领域上,试图将生活交通中遇到的种种问题交给计算机进行科学精密的计算,以帮助人们解决因交通带来的各种困扰,提高人们的生活质量。目前,国外公交线路查询系统都发展到一个比较成熟的阶段,无论是从理论上还是从技术上都比较成熟。国外的公交线路查询系统已经将GIS、GPS、RS技术集合到公交查询系统中。GIS技术:即GeographyInformationSystem,地理信息系统。简单说就是将地图与数据库相结合。GPS技术:即GlobePositionSystem,全球定位系统,通过每3颗卫星确定一个点的经纬度坐标,使用WGS_1984坐标系。RS技术:RemoteSensing,遥感[1]。通过卫星或飞机接收地面反射波谱,判断地面情况技术。目前国的公交车线路查询系统也结合了很多技术,比如:基于ASP.NET+XML的公交查询系统,基于J2ME的公交线路查询系统,基于WebGIS公交线路查询系统。国公交线路查询系统也正向将GIS、GPS、RS技术相结合的发展方向。typedefstruct{charstopName[30];//站点名,最长为30个字符,以满足一些站点名很长//<如:职教基地<商贸旅游职院>的需要intfirStpANListNo;//与该站点直接相邻的第一个站点此两站之间的弧在StopArcNodeList数组中的编号 }Stop,StopList[MAX_STOP_NUM];//定义一个StopList数组作为站点库大小为MAX_STOP_NUM即1700[9],typedefstructBus,{charbusName[24];//公交线路名intsourStopNo;//起点站编号intdestStopNo;//终点站编号intprice;//票价intstopsSum;//总站数int*busline;//该线路依次经过的所有站点的编号}Bus,BusList[MAX_BUS_NUM];//定义一个BusList数组作为公交线路库,大小为MAX_BUS_NUM即180,typedefstructStopArcNode{intcurrentStopNo;//当前站的站点编号intnextStopNo;//与当前站直接相邻的下一站的站点编号floatdistance;//两站之间距离inttime;//经过此两站所用的平均时间intcrossBusSum;//经过此两站之间的公交线路总数intcrossBusNo[15];//经过此两站之间的所有公交线路的编号intnextStpANListNo;//下一个与当前站直接相邻的弧信息在StopArcNodeList中的编号}*StopArcNodeList;//定义一个StopArcNodeList数组的首地址指针typedefstruct{StopVNodeStopVNodeList[MAX_STOP_NUM];StopArcNode*StopArcNodeList;intArcListMaxSize;BusVNodeBusList[MAX_BUS_NUM];}ALGraph;StopArcNodeList申请空间,StopArcNodeList中的一些成员变量。然后打开stops.txt文件读取站点信息即读站点名,生成StopList数组,再打开buses.txt文件生成BusList数组,再打开temp.txt和distance_and_time.txt文件,从temp.txt中读入线路中详细站点,对于每一条弧信息start->end,只有在每一条线路的首个弧信息需要读start,其他都是有上一条弧信息中的end中传递过来的,所以需要标记flag标记,同时每次从temp.txt读入一个数据需要判断是否是线路之间的分隔符"#",遇到"#",就应该更改flag变量。对于start->end,需要用IsExisted去判断该弧信息是否已经存在于StopArcNodeList数组中,如果已经存在,则只需要将当前的线路编号存入弧信息的crossBusNo中,并更新相应的crossBusSum变量值,如果没有存在,则需要将该弧信息存入StopArcNodeList数组中,并从distance_and_time.txt中读入距离和时间,更新StopArcNodeList的长度值。具体实现如下:voidCreatALGraph<ALGraph*G>{intback=0;//用来标记当前的两站之间的弧信息是去程信息还是返程信息intflag=0;//用来标记当前弧信息start->end中start是否是由上一段弧信息end传//递过来的,只有在每条路线的首个弧信息需要独立读取start和end数据,其他均可以//由前一条弧信息中的end传递intcurrentBusNo=0;//根据buses.txt中公交线路的顺序依次将各个线路中依次//经过的站起来……//先为StopArcNodeList数组申请MAX_ARC_NUM个空间//初始化StopArcNodeList中每个元素的nextStpANListNo,crossBusSum两个数据项……//打开stops.txt文件,读取站点信息初始化G->StopList数组[10]fp1=fopen<"C:\\stops.txt","r">;……for<i=0;i<1700;i++> {if<!feof<fp1>> { fscanf<fp1,"%s",G->StopList[i].stopName>;G->StopList[i].firStpANListNo=-1;//初始化,不应该设为0 G->StopList[i].currentStpANListNo=-1; }…… }//打开buses.txt文件,读取公交线路信息,初始化G->BusList数组fp2=fopen<"C:\\buses.txt","r">;……for<i=0;i<180;i++> {if<!feof<fp2>> {fscanf<fp2,"%s",G->BusList[i].busName>;fscanf<fp2,"%s",start>;//读取始发站存入start字符串中fscanf<fp2,"%s",end>;//读取终点站存入end字符串中 fscanf<fp2,"%d",&G->BusList[i].price>; fscanf<fp2,"%d",&G->BusList[i].stopsSum>; G->BusList[i].busline=<int*>malloc<G->BusList[i].stopsSum*sizeof<int>>;//调用FindStopNo求始发站和终点站在StopList数组中的下标编号startNo,endNoG->BusList[i].sourStopNo=FindStopNo<G->StopList,start>; G->BusList[i].destStopNo=FindStopNo<G->StopList,end>; }…… }//同时打开temp.txt和distance_and_time.txt文件读取站点与站点之间信息,初始//化StopArcNodeList数组,temp.txt文件中存放的所有公交线路经过的每一站站点,//用#分开不同线路fp1=fopen<"C:\\temp.txt","r">;……//distance_and_time.txt文件中随机生成了用来表示两站之间距离和平均所用时间的//1000组数据fp2=fopen<"C:\\distance_and_time.txt","r">;……while<!feof<fp1>>//读buses_and_stops文件中所有数据{//flag若为0,则从文件中读入〔适用于每条路线的首站,否则直接由上一//个end变量传递过来if<flag==0> {fscanf<fp1,"%s",start>; tempNo1=FindStopNo<G->StopList,start>; G->BusList[currentBusNo].busline[k]=tempNo1; k++; }fscanf<fp1,"%s",end>;//再取相邻站if<strcmp<end,"#">==0> {currentBusNo++;//如果已经读到一条线路的最后则重新读下一条线路flag=0;//下次就要先取start变量k=0;continue; }//如果end不是#,则读取end站的编号,并备份在tempNo中,用于后面直接过渡//给下一个start变量tempNo2=FindStopNo<G->StopList,end>; G->BusList[currentBusNo].busline[k]=tempNo2; k++;//如果start->end没有存在于StopArcNodeList中,存入之后StopArcNodeList当前下//标编号i应该加1if<!IsExisted<G,tempNo1,tempNo2,i,fp2,currentBusNo,back>> {i++;//如果StopArcNodeList已经存满,则需要追加更多的空间……} back=1;//表示下次存的就是返程的弧信息了//交换start与end,同理如果end->start没有存在于StopArcNodeList中,存入之后//StopArcNodeList当前下标编号i应该加1if<!IsExisted<G,tempNo2,tempNo1,i,fp2,currentBusNo,back>> {i++;//如果StopArcNodeList已经存满,则需要追加更多的空间…… }back=0;//表示下次存入的就是去程的弧信息了tempNo1=tempNo2;//将上一个弧信息中end的编号即relaVNodeNo赋给//tempNo1,并不必重新读入下一条弧信息的startflag=1; } fclose<fp1>; fclose<fp2>;}//IsExited函数主要用于判断相邻两站之间的弧信息stopNo1->stopNo2是否已经存在//于G->StopArcNodeList中,如果已经存在,则只需更新stopNo1->stopNo2弧信//息,将当前的公交线路号加入弧中,更新其所经过的公交线路总数intIsExisted<ALGraph*G,intstopNo1,intstopNo2,intlocation,FILE*fp,intcurrentBusNo,intback>{…… k=G->StopList[stopNo1].firStpANListNo;while<k!=-1>{if<G->StopArcNodeList[k].relaStopNo==stopNo2> {G->StopArcNodeList[k].crossBusNo[G->StopArcNodeList[k].crossBusSum]=currentBusNo; G->StopArcNodeList[k].crossBusSum++;return1; } k=G->StopArcNodeList[k].nextStpANListNo; } G->StopArcNodeList[location].stopNo=stopNo1; G->StopArcNodeList[location].relaStopNo=stopNo2;//如果back为1,则表示当前存入的弧信息是重复的返程信息,所以无需再去文件中//读入distance和time两个数据,只需要从上一个弧信息中复制过来if<back> {G->StopArcNodeList[location].distance=G->StopArcNodeList[location-1].distance; G->StopArcNodeList[location].time=G->StopArcNodeList[location-1].time; }else {if<feof<fp>>rewind<fp>;else {fscanf<fp,"%f%d",&distance,&time>; G->StopArcNodeList[location].distance=distance;G->StopArcNodeList[location].time=time; } }G->StopArcNodeList[location].crossBusNo[G->StopArc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026青海生态产业竞争格局优化可持续投研究
- 中央企业境外财务报告分类办法
- 中国5G产业投资基金份额转让规定
- 2026氢氧化锌造纸行业市场现状供需分析及投资趋势的评估规划分析研究报告
- 2026中国新型环保漂白剂消费者接受度测试结果分析
- 2026中国数字孪生城市建设进度与三维建模技术突破研究
- CN119390441A 铋层状钛酸铋钠高温压电陶瓷材料及其制备方法和应用 (山东利恩斯智能科技有限公司)
- 东莞金地五金新建项目环境影响报告表
- 设备原理试题及对应答案梳理
- 沙滩排球赛志愿者服务手册
- 食堂安全消防培训
- 初中物理八年级上册专题突破讲义(人教版)专题01 机械运动计算题分析(原卷版)
- PIVAS感控知识培训课件
- 中储粮员工知识培训内容课件
- 2024年天津市工业和信息化研究院招聘笔试真题
- Unit1MeandmyclassLesson5课件冀教版八年级英语上册
- 橡胶炼胶工上岗证考试题库及答案
- DB23∕T 3368-2022 沥青路面冷再生设计与施工技术规程
- 二建继续教育bim考试试题及答案
- 肺癌手术麻醉管理
- 2025年广东省广州市中考二模英语试题(含答案)
评论
0/150
提交评论