数据结构实践课程报告.doc
文本预览下载声明
算法设计实践课程报告
学院:计算机学院
班级:
学号:
姓名:
课程目的
本课程设计为培养学生综合实践的能力,理论知识和实际有机的结合起来,锻炼学生实际分析问题和解决问题的能力,提高学生适应实际、实践编程的能力,使对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
显示全部