兰州道路交通网络信息查询.docx
- 文档编号:8219756
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:17
- 大小:301.93KB
兰州道路交通网络信息查询.docx
《兰州道路交通网络信息查询.docx》由会员分享,可在线阅读,更多相关《兰州道路交通网络信息查询.docx(17页珍藏版)》请在冰豆网上搜索。
兰州道路交通网络信息查询
*******************
实践教学
*******************
兰州理工大学
2011年春季学期
算法与数据结构课程设计
题目:
兰州道路交通网络信息查询
专业班级:
姓名:
学号:
指导教师:
成绩:
摘要
在本设计实验中,我所采用的是邻接矩阵作为数据的存储结构,用不同的功能模块对两地距离和道路交通信息进行编辑。
兰州道路交通网络信息查询程序的目的是为人们提供各种信息查询服务:
即查询任意两地之间的一条最短的简单路径、还有两地之间的距离等。
最短路径的输出有各种方法,此程序中采用迪杰斯特拉算法。
迪杰斯特拉算法用于求解一个有向图(也可以是无向图,无向图是有向图的一种特例)的一个点(称之为原点)到其余各点(称之为周边点)的最短路径问题。
关键词:
交通网络,邻接矩阵,迪杰斯特拉。
序言
我们在对一些问题进行求解时,会发现有些问题很难找到规律,或者根本无规律可寻。
对于这样的问题,可以利用计算机运算速度快的特点,先搜索查找所有可能出现的情况,再根据题目条件从所有可能的情况中,删除那些不符合条件的解。
图是一种复杂的非线性结构,在人工智能,工程,数学,物理,化学,计算机学科等领域中,都有着广泛的应用。
我们用最短路径问题,通过一个人们熟悉的交通咨询系统实例来验证迪杰斯特拉算法。
兰州道路交通网络信息查询是以兰州道路交通网络为背景,设计出的一个简单的能够实现兰州道路交通网络信息查询功能的c语言程序系统,对兰州道路交通信息进行编辑,为旅客提供了两地之间的最短路径及距离。
查询的实现以用户和计算机对话的方式进行,要注意人机交互的屏幕界面,由用户选择要查询的地点,输入要查询路径的起点和终点。
1.采用类C语言定义相关数据类型
函数有:
voidCreateUGN();/*造图函数*/
voidShortwstPath();/*最短路径函数*/
voidnarrate();/*说明函数*/
voidintroduce();/*介绍函数*/
voidoutput();/*输出函数*/
voidmain()/*主函数*/
类有:
ArcCell;/*定义边的类型*/
VertexType;/*定义顶点的类型*/
MGraph;/*定义图的类型*/
全局变量有:
MGraphG;/*把图定义为全局变量*/
intP[33][33];
longintD[33];
2.问题描述
在交通网络非常发达,交通工具和交通方式不断更新的今天,人们在出差,旅行或做其他出行时,不仅关心节省交通费用,而且对里程和所需时间也感兴趣。
对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。
图中顶点表示站点,边表示站之间的交通关系。
这个系统可以回答旅客提出的各种问题。
3.需求分析
设计一个交通咨询系统,能让旅客咨询从一个站顶点到另一个站顶点之间的最短路径或最少距离等。
对于不同咨询要求,可输入站之间的路程或所走距离。
该设计共分三部分,一是建立交通网络图的存储结构;二是解决单源最短路径问题;最后再实现两个站顶点之间的最短路径问题。
4.各模块流程图及伪码算法
(1).其功能模块图1所示:
图1功能模块图
(2).伪码算法如下:
voidShortwstPath(num)/*最短路径函数*/
intnum;
{intv,w,i,t;
intfinal[33];
intmin;
for(v=0;v<33;++v)/*初始化*/
{
final[v]=0;/*标志数组初始化*/
D[v]=G.arcs[num][v].adj;
for(w=0;w<33;++w)
P[v][w]=0;/*设空路径*/
if(D[v]<20000)/*v,v0间有边存在*/
{P[v][num]=1;P[v][v]=1;/*到v的最短路径上包含v0及v*/
}/*if*/
}
D[num]=0;
final[num]=1;/*初始化,v0顶点属于B集*/
/*开始主循环,每次求得v0到某个v顶点的最短路径,并加v到B集*/
for(i=0;i<33;++i)/*其余G.vexnum-1各顶点*/
{
min=20000;
for(w=0;w<33;++w)
if(!
final[w])/*w顶点在V-S中*/
if(D[w] final[v]=1;/*离v0顶点最近的v加入B*/ for(w=0;w<33;++w)/*更新当前最短路径及距离*/ if(! final[w]&&((min+G.arcs[v][w].adj) { D[w]=min+G.arcs[v][w].adj;/*修改D和P数组*/ for(t=0;t<33;t++)P[w][t]=P[v][t]; P[w][w]=1; }/*if*/ }/*for*/ } 5.函数的调用关系图如图2所示: 图2函数的调用关系图 首先用一个数组来定义邻接矩阵,并定义当前顶点数,顶点用来表示地点,数组的值用来表示路径长度。 然后给各个顶点赋予初值,亦即兰州各个地方的名称,并确定各个地方之间的距离,还要标注各个地方的简单信息,让旅客一目了然,并用迪杰斯特拉算法来实现最短路径的求解。 之后在主函数main()中调用各个子函数,显示两地点之间的最短路径、某地点相关信息。 整个程序功能就这样实现了。 6.调试分析 (a).调试中遇到的问题及对问题的解决方法 遇到的问题: 在调试时,有时会把值输错,导致超出范围,输出错误结果或程序直接结束。 或者有时候还会在错误的环境下运行。 解决方法: 首先注意值的范围,输入在范围内的任意值。 其次注意运行环境,有中文的一定要在中文运行环境中进行。 (b).算法的时间复杂度和空间复杂度 时间复杂度O(n2)。 空间复杂度O(n2) 7.测试结果 我对所到地点信息查询进行了如下测试: 先输入账号密码,然后按回车键就出现如下结果: 经测试结果是正确的。 然后选择服务项目,输入1或2,若输入1之后再回车就出现如下结果: 之后输入需要查询的地点的序号,如9,再按回车,结果如下 最后再按任意键结束。 若在选择服务项目是输入2,再按回车就出现如下结果: 然后输入从哪个地点出发,如0,按回车 在输入要去的目的地的序号,如19,按回车: 最后按任意键结束程序。 设计总结 在这次数据结构课程设计中,我的题目是: 兰州道路交通网络信息查询,通过对该题目的设计,我加深了对图的建立和对迪杰斯特拉算法的理解,对课本中所学的各种数据结构进一步理解和掌握,学会了如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。 两周的时间虽然很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各科知识融会,组织,来配合学习,总之,这段时间中我收益很大,学到很多。 在课程设计时我遇到了很多的问题,但在老师的帮助和对各种资料的查阅中,最终将问题解决,这培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。 在以后的学习中我会更加注意各个方面的能力的协调发展。 参考文献 1严蔚敏,吴伟民.《数据结构(C语言版)》.清华大学出版社. 2严蔚敏,吴伟民.《数据结构题集(C语言版)》.清华大学出版社. 3《DATASTRUCTUREWITHC++》.WilliamFord,WilliamTopp.清华大学出版社(影印版). 4谭浩强.《c语言程序设计》.清华大学出版社. 5.数据结构与算法分析(Java版),APracticalIntroductiontoDataStructuresandAlgorithmAnalysisJavaEditionCliffordA.Shaffer,张铭,刘晓丹译 电子工业出版社2001年1月 致谢 在本次设计的过程中我遇到了很多困难,这都要感谢指导老师王连相的指导,才使我在顺利完成设计项目的同时又加深了对数据结构这门学问的理解,并且发现了自己的不足。 许多同学也对我给予了许多帮助,向我推荐了一些好的书籍,它们给我提供了许多优秀的设计思路和简洁而精辟的算法,使我在整体设计的基础上得以完善各个模块的设计,从而设计了一个比较合理的道路查询程序,在这里一并致谢。 总之,我要对在这次课设中所有帮助过我的人说声谢谢! 祝他们身体健康生活愉快! 附录: 源程序(带注释) #include"string.h" #include"stdlib.h" #include"stdio.h" typedefstructArcCell{ intadj; char*info; }ArcCell;/*定义边的类型*/ typedefstructVertexType{ intnumber; char*place; }VertexType;/*定义顶点的类型*/ typedefstruct{ VertexTypevex[33]; ArcCellarcs[33][33]; intvexnum,arcnum; }MGraph;/*定义图的类型*/ MGraphG;/*把图定义为全局变量*/ intP[33][33]; longintD[33]; voidCreateUDN(v,a)/*造图涵数*/ intv,a; {inti,j; G.vexnum=v; G.arcnum=a; for(i=0;i G.vex[i].number=i; G.vex[0].place="兰州交通大学"; G.vex[1].place="甘肃政法学院"; G.vex[2].place="兰州师范大学"; G.vex[3].place="培黎广场"; G.vex[4].place="师大附中"; G.vex[5].place="桥北"; G.vex[6].place="桥南"; G.vex[7].place="西站"; G.vex[8].place="公交公司"; G.vex[9].place="小西湖"; G.vex[10].place="兰州理工大本部"; G.vex[11].place="西湖公园"; G.vex[12].place="文化宫"; G.vex[13].place="西关十字"; G.vex[14].place="兰州木器厂"; G.vex[15].place="陆军总院"; G.vex[16].place="石油大厦"; G.vex[17].place="中山桥"; G.vex[18].place="兰州剧院"; G.vex[19].place="南关十字"; G.vex[20].place="五泉山"; G.vex[21].place="铁路局"; G.vex[22].place="广场西口"; G.vex[23].place="广场东口"; G.vex[24].place="兰州大学"; G.vex[25].place="火车站"; G.vex[26].place="市政府"; G.vex[27].place="雁滩"; G.vex[28].place="啤酒厂"; G.vex[29].place="胶鞋厂"; G.vex[30].place="杨家桥"; G.vex[31].place="龚家湾"; G.vex[32].place="兰州理工大西校区"; for(i=0;i for(j=0;j G.arcs[i][j].adj=20000; G.arcs[0][1].adj=G.arcs[1][0].adj=500; G.arcs[1][2].adj=G.arcs[2][1].adj=600; G.arcs[2][3].adj=G.arcs[3][2].adj=260; G.arcs[3][4].adj=G.arcs[4][3].adj=700; G.arcs[4][5].adj=G.arcs[5][4].adj=1100; G.arcs[5][6].adj=G.arcs[6][5].adj=390; G.arcs[6][7].adj=G.arcs[7][6].adj=830; G.arcs[7][8].adj=G.arcs[8][7].adj=1200; G.arcs[8][9].adj=G.arcs[9][8].adj=780; G.arcs[9][10].adj=G.arcs[10][9].adj=1006; G.arcs[9][11].adj=G.arcs[11][9].adj=574; G.arcs[11][12].adj=G.arcs[12][11].adj=540; G.arcs[12][13].adj=G.arcs[13][12].adj=670; G.arcs[6][14].adj=G.arcs[14][6].adj=850; G.arcs[14][15].adj=G.arcs[14][15].adj=980; G.arcs[15][9].adj=G.arcs[9][15].adj=640; G.arcs[9][16].adj=G.arcs[16][9].adj=802; G.arcs[16][17].adj=G.arcs[17][16].adj=625; G.arcs[17][18].adj=G.arcs[18][17].adj=487; G.arcs[13][18].adj=G.arcs[18][13].adj=280; G.arcs[18][19].adj=G.arcs[19][18].adj=511; G.arcs[19][20].adj=G.arcs[20][19].adj=1389; G.arcs[19][21].adj=G.arcs[21][19].adj=1487; G.arcs[19][22].adj=G.arcs[22][19].adj=956; G.arcs[22][23].adj=G.arcs[23][22].adj=479; G.arcs[23][24].adj=G.arcs[24][23].adj=1876; G.arcs[24][25].adj=G.arcs[25][24].adj=765; G.arcs[17][26].adj=G.arcs[26][17].adj=895; G.arcs[26][27].adj=G.arcs[27][26].adj=2067; G.arcs[7][28].adj=G.arcs[28][7].adj=1520; G.arcs[28][29].adj=G.arcs[29][28].adj=967; G.arcs[29][30].adj=G.arcs[30][29].adj=769; G.arcs[30][31].adj=G.arcs[31][30].adj=800; G.arcs[31][32].adj=G.arcs[32][31].adj=329; } voidnarrate()/*说明函数*/ { inti,k=0; for(i=0;i<33;i++) { printf("〔%d〕%-10s",i,G.vex[i].place); k=k+1; if(k%4==0)printf("\n\n"); } } voidintroduce() { intb; printf("请输入您想要查询的地点编号: "); scanf("%d",&b); getchar(); printf("\n"); switch(b) {case0: printf("0: 兰州交通大学\n\n 前兰州铁道学院。 \n\n");break; case1: printf("1: 甘肃政法学院\n\n兰州另一所重要的学校。 \n\n");break; case2: printf("2: 兰州师范大学\n\n 兰州一所重要的师范类学校。 \n\n");break; case3: printf("3: 培黎广场\n\n 安宁区的一个重要的广场。 \n\n");break; case4: printf("4: 师大附中\n\n 兰州市第一的高中学校。 \n\n");break; case5: printf("5: 桥北\n\n 在黄河市场附近,是交通枢纽。 \n\n");break; case6: printf("6: 桥南\n\n 重要的交通枢纽,有一个小树林。 \n\n");break; case7: printf("7: 兰州西站\n\n 火车站兼购物市场,车多人多。 \n\n");break; case8: printf("8: 公交公司\n\n 公交车的管理公司。 \n\n");break; case9: printf("9: 小西湖\n\n 购物市场。 \n\n");break; case10: printf("10: 兰州理工大学\n\n 前甘肃工业大学,在甘肃省内稳做第三把交椅。 \n\n");break; case11: printf("11: 西湖公园\n\n一所免费的公共公园。 \n\n");break; case12: printf("12: 文化宫\n\n甘肃文化的集结地。 \n\n");break; case13: printf("13: 西关什字\n\n 兰州市中心。 \n\n");break; case14: printf("14: 兰州木器厂\n\n制造家具的公司。 \n\n");break; case15: printf("15: 陆军总院\n\n医院,兰州市医疗设施先进的医院。 \n\n");break; case16: printf("16: 石油大厦\n\n一座立在黄河旁边的大厦,是一座写字楼。 \n\n");break; case17: printf("17: 中山桥\n\n 黄河第一桥,主要构架为钢铁所造,历史悠久。 \n\n");break; case18: printf("18: 兰州剧院\n\n兰州历史悠久,规模较大的电影院。 \n\n");break; case19: printf("19: 南关\n\n 政府部门所在地,市中心。 \n\n");break; case20: printf("20: 五泉山\n\n兰州市的一座公园,比较著名。 \n\n");break; case21: printf("21: 铁路局\n\n管理铁路和火车的地方。 \n\n");break;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 兰州 道路交通 网络 信息 查询