数据结构交通指南系统.docx
《数据结构交通指南系统.docx》由会员分享,可在线阅读,更多相关《数据结构交通指南系统.docx(3页珍藏版)》请在冰豆网上搜索。
数据结构交通指南系统
数据结构—交通指南系统
南通大学数据结构实验课 实验报告 学生姓名 所在院系专 业 学 号 指导教师 2013年12南通大学月11日 交通指南系统 1.问题描述 假设以一个带权有向图表示某一区域的公交线路图,图中顶点代表一些区域中的重要站点,弧代表已有的公交线路,弧上的权表示该线路上的票价,试设计一个交通指南系统,指导前来咨询者以最低的票价或最少的时间从区域中的某一站点到达另一站点。
2.基本要求 设计结点和图的存储结构;设计任意两点最短路径方法; 输入:
图的相关信息以建立公交线路网,以及公交线路网咨询的任意两个站点; 输出:
两个站点间一条最短的简单路径。
3.实现提示 结点和图的存储结构typedefstructnode {intno;floatwgt; structnode*next;}edgenode;typedefstruct {charvtx; edgenode*link; }vexnode; typedefvexnodeGraph[n];; voidFloyd(GraphG,floatA[n][n],intp[n][n]){inti,j,k; for(i=0;i for(k=0;k if(A[i][k]+A[k][j] A[i][j]=A[i][k]+A[k][j]; }} 算法提示 采用任意两点最短路径的相关算法。
4.算法设计 结点类型:
structArcCell{ intadj; //存放弧长 bool*info;//是否用过该弧}; struct_MGraph{ charvexs[20];//存放站点ArcCellarcs[20][20];//intvexnum;intarcnum;}; 类定义:
classMGraph //没用私有成员{ public:
_MGraphmgraph;// voidDestroyGraph(); //析构函数销毁图 intLocateVex(charu); //返回顶点在图中的位置boolCreateDN(); //构造有向网voidShortestPath_FLOYD(Path&P,Distanc&D);}; 构造有向网:
boolMGraph:
:
CreateDN()//构造有向网{ inti,j,w;charv1,v2; cout cin>>>>;cout for(i=0;i>[i];} for(i=0;i for(i=0;i>v1>>v2>>w;intm=LocateVex(v1);intn=LocateVex(v2);[m][n].adj=w; //的权值 } returntrue; } 销毁有向图:
voidMGraph:
:
DestroyGraph(){ for(inti=0;i 定位点:
intMGraph:
:
LocateVex(charu){ for(inti=0;i return-1;} 最短路径 voidMGraph:
:
ShortestPath_FLOYD(Path&P,Distanc&D)//求每对顶点间的最短路径 //用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w] //若P[v][w][u]为TRUE,则u是从v到w当前求得最短路径上的顶点。
{ intu,v,w,i; for(v=0;v }} for(u=0;u P[v][w][i]=P[v][u][i]||P[u][w][i];//从v到w的路径经过从v到u和从u到w的所有路径
} } } } } 5.源代码 #includeusingnamespacestd; structArcCell{intadj; //存放弧长 bool*info;//是否用过该弧}; struct_MGraph{ charvexs[20];//存放站点ArcCellarcs[20][20];//intvexnum;intarcnum;}; typedefintPath[20][20][20];typedefintDistanc[20][20]; classMGraph //没用私有成员{ public:
_MGraphmgraph;//voidDestroyGraph(); //析构函数销毁图intLocateVex(charu); //返回顶点在图中的位置boolCreateDN(); //构造有向网voidShortestPath_FLOYD(Path&P,Distanc&D);}; boolMGraph:
:
CreateDN()//构造有向网{inti,j,w;charv1,v2;cout>>>; cout>[i];}for(i=0;i>v1>>v2>>w;intm=LocateVex(v1);intn=LocateVex(v2);[m][n].adj=w; //的权值 } returntrue; } voidMGraph:
:
DestroyGraph(){for(inti=0;i } intMGraph:
:
LocateVex(charu){for(inti=0;i voidMGraph:
:
ShortestPath_FLOYD(Path&P,Distanc&D)//求每对顶点间的最短路径//用Floyd算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w] //若P[v][w][u]为TRUE,则u是从v到w当前求得最短路径上的顶点。
{intu,v,w,i;for(v=0;v P[v][w][i]=P[v][u][i]||P[u][w][i];//从v到w的路径经过从v到u和从u到w的所有路径 } }}}} voidmain(){ MGraphg;Pathp;//3维数组Distancd;//2维数组ints,t,k;charv1,v2;floatsum=0;cout cout>v1>>v2;s=(v1);t=(v2); _FLOYD(p,d); if(s!
=t) { inta=s; cout cout 6.举例测试及运行结果例:
10B20A1515C2030D 7.收获与体会 这是一个实际应用题。
本实验的核心代码是用FLOYD算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w],其中利用到了一些稍许繁琐的数据存储结构。
通过本实验,我觉得熟练掌握所学的算法对于编程解决实际问题非常有效。
我们应该在平时多用我们所学的数据结构知识编写程序,尝试解决实际的问题。
刚开始的时候,根据书上的提示自己编写好程序输入电脑,然后编译的时候,出现了许许多多各种各样的问题,回头查看程序,自己却很难找到问题所在,于是查阅各种资料,问了身边很多同学,终于将程序顺利调试出来了。
通过这个系统的实现,我从输入代码跟运行调试的整个过程中学习到了很多东西,也了解到系统出现问题的时候的各种错误应该如何解决。
这次的实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足够的耐心,细细推敲。
越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。
数据结构这门课程更加注重设计灵活、巧妙的算法,提高程序运行效率,这对我逻辑思维能力的提高有相当大的帮助。
虽然这学期学完了这门课程,但我在以后的学习中不会放下数据结构,而是经常回顾温习,并多从生活中寻找和发现问题,进而尝试用数据结构的知识设计算法,并进行简单的实现。
相信这样的积累过程对我今后的学习生活大有帮助,让我受益终生。
7.收获与体会 这是一个实际应用题。
本实验的核心代码是用FLOYD算法求有向网G中各对顶点v和w之间的最短路径P[v][w]及其带权长度D[v][w],其中利用到了一些稍许繁琐的数据存储结构。
通过本实验,我觉得熟练掌握所学的算法对于编程解决实际问题非常有效。
我们应该在平时多用我们所学的数据结构知识编写程序,尝试解决实际的问题。
刚开始的时候,根据书上的提示自己编写好程序输入电脑,然后编译的时候,出现了许许多多各种各样的问题,回头查看程序,自己却很难找到问题所在,于是查阅各种资料,问了身边很多同学,终于将程序顺利调试出来了。
通过这个系统的实现,我从输入代码跟运行调试的整个过程中学习到了很多东西,也了解到系统出现问题的时候的各种错误应该如何解决。
这次的实验使我了解到,平时对知识的积累相当重要,同时也要注重课上老师的讲解,老师在课上的延伸是课本上所没有的,这些知识对于我们对程序的编写有很大的作用,同时,编程也要求我们有足够的耐心,细细推敲。
越着急可能就越无法得到我们想要的结果,遇到不会的问题要多多请教,知识是在实践与向别人请教的过程中积累的,所以问是至关重要的,只要肯下功夫很多东西都是可以完成的。
数据结构这门课程更加注重设计灵活、巧妙的算法,提高程序运行效率,这对我逻辑思维能力的提高有相当大的帮助。
虽然这学期学完了这门课程,但我在以后的学习中不会放下数据结构,而是经常回顾温习,并多从生活中寻找和发现问题,进而尝试用数据结构的知识设计算法,并进行简单的实现。
相信这样的积累过程对我今后的学习生活大有帮助,让我受益终生。