文档详情

数据结构实践课程报告.doc

发布:2018-06-21约5.6千字共8页下载文档
文本预览下载声明
算法设计实践课程报告 学院:计算机学院 班级: 学号: 姓名: 课程目的 本课程设计为培养学生综合实践的能力,理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对C++系统编程有一个深入的了解。 二、题目 3. 校园导游程序——最短路径应用 问题描述:   用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。要求能够回答有关景点介绍、游览路径等问题。 基本要求:   实现一简单的功能查询界面: (1) 查询各景点的相关信息; (2) 选定某一景点作为起始点,可查询从该景点出发到其余各景点的最佳游览路径。 算法分析与设计 首先,此算法建立了类mgraph,通过邻接矩阵存储校园景点图,并通过构造函数初始化图,手动给校园图附上相关信息(包括景点编号、名称、简介、路径及路径长度等)。然后,手动绘制了部分模拟校园图。该函数包括深度优先遍历图和迪杰斯特拉最短路径算法,主要功能是实现校园七个景点(0.图书馆,1.三山楼,2.三江楼,3.教工浴室,4.西山操场,5.西山美食城,6.京江操场)的简介和最短路径的算法,最后用主函数输出结果,用switch语句分别输出,最后求出两点之间的最短路径。 运行结果及分析 输出结果: 总结 这个程序在调试时,我发现一次只能查找一个景点的相关介绍,之后的最短路径的计算生成时是成功的,但在调试时却不是很好,输出结果有误。 通过这次算法设计实践,我对数据结构的运用有了更深的体会,对无向图和创建无向图的理解更加深刻,理解了迪杰斯特拉算法的原理,不再是盲目地照搬书上的程序。之后,我还发现了我的不足之处,对程序的设计还不过灵活。 附录:源程序清单 #includeiostream #includestring using namespace std; const int maxsize=100; class mgraph { public: mgraph(string a[],int n,int e);//构造函数,建立n个顶点,e条边的图 ~mgraph(){} //析构函数 void dfstraverse(int v);//深度优先遍历 void shortpath(mgraph g,int v,int r);//求v到其余各个顶点的最短路径 private: string vertex[maxsize];//存放图中顶点的数组 int arc[maxsize][maxsize];//存放图中边的数组 int vertexnum,arcnum;//图中的顶点数和边数 }; mgraph::mgraph(string a[],int n,int e) { int i,j,k; vertexnum=n; arcnum=e; for( i=0;ivertexnum;i++) vertex[i]=a[i]; for(i=0;ivertexnum;i++) //初始化邻接矩阵 for(j=0;jvertexnum;j++) arc[i][j]=0; for(k=0;karcnum;k++)//依次输入每一条边 { cout请输入两个景点的编号:endl; cinij;//依次输入边依附的两个顶点的编号和距离 if(i7j7)arc[i][j]=arc[j][i]=1;//置有边标志 else cout没有该景点!!!endl; } } void mgraph::shortpath(mgraph g,int v,int r) { for (int i = 0; i vertexnum; i++) for (int j = 0; j vertexnum; j++) { arc[i][j] = 1000000;//初始化路径长度 } arc[0][1]=arc[1][0]=10; arc[1][2]=arc[2][1]=5; arc[2][3]=arc[3][2]=8; arc[0][4]=arc[4][0]=15; arc[1][4]=arc[4][1]=9; arc[2][4]=arc[4][2]=10; arc[3][4]=arc[4][3]=11; arc[4][5]=arc[5][4]=12; arc[0][5]=arc[5][0]=10; arc[0][6]=arc[6][0]=14; arc[5][6]=arc[6][5]=9; i
显示全部
相似文档