数据结构试验报告校园导游docx.docx
- 文档编号:27259283
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:37
- 大小:255.28KB
数据结构试验报告校园导游docx.docx
《数据结构试验报告校园导游docx.docx》由会员分享,可在线阅读,更多相关《数据结构试验报告校园导游docx.docx(37页珍藏版)》请在冰豆网上搜索。
数据结构试验报告校园导游docx
《数据结构》
课程设计报告
课程名称:
《数据结构课程设计》;
课程设计题目:
校园导游查询;
姓名:
张晓艺;
院系:
计算机学院;
专业:
数字媒体技术;
年级:
大二;
学号:
10054220;
指导教师:
王立波;
2011年12月17日
1课程设计的目的………………………………………………………………x
2需求分析………………………………………………………………………x
3课程设计报告内容……………………………………………………………x
1、概要设计……………………………………………………………………x
2、详细设计……………………………………………………………………x
3、调试分析……………………………………………………………………x
4、用户手册……………………………………………………………………x
5、测试结果……………………………………………………………………x
6、程序清单……………………………………………………………………x
4小结…………………………………………………………………………x
5参考文献………………………………………………………………x
1.课程设计的目的:
(1)熟练运用C++编写程序;
(2)会用Floyd算法查找最短路径;
2.需求分析:
1.题目:
【校园导游咨询】
[问题描述]
(1)设计你的学校的校园平面图,所含景点不少于10个。
以图中顶点表示学校各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
(3)为来访客人提供图中任意景点相关信息的查询。
[测试数据]
由读者根据实际情况指定。
2.任务:
通过此程序可实现以下功能:
(1)用一维数组存放景点信息,二维数组存放景点间的距离,最短距离,最短路径;
(2)Floyd算法计算最短距离和路径;
(3)根据景点序号查询景点的一系列信息,及两景点间的最短路径和最短距离。
3.测试数据:
查询类型:
I(表示查询景点信息);
景点编号:
3;
查询类型:
D(表示查询景点间的最短路径和最短距离);
景点编号:
19;
3.课程设计报告内容:
1.概要设计:
(1)首先我画了学校主要几个景点的分布图以及自己定的一些距离,图如下:
(2)接着我定义了一个顶点结构体,定义如下:
structDate
{
intnum;//景点编号
charname[50];//景点名称
charintroduce[100];//景点介绍
};
(3)然后我定义了一个类,定义如下:
classTravel
{
private:
Datedate[15];
intdistance[15][15];
intPath[15][15];
intShortestDistance[15][15];
voidFloyd();
public:
Travel();
~Travel(){}
voidIntroduce(int);
voidScanf();
voidShortDistance(int,int);
};
(4)基本操作:
voidFloyd();//Floyd算法,计算最短路径和最短距离
Travel();//构造函数
~Travel(){}//析构函数
voidIntroduce(int);//介绍景点函数
voidScanf();//外部输入函数
voidShortDistance(int,int);//最短距离计算函数
本程序分为2个模块:
Intmain()
{
初始化;
VoidScanf();
}
函数调用关系基本结构图如下所示:
2.详细设计:
(1)主函数初始化变量;
(2)调用外部接口函数Scanf();
(3)输入查询类型,如果为“I”,调用景点介绍函数,如果为“D”,调用最短距离和路径函数。
3.调试分析:
刚开始运行时,所有汉字部分输出都为火星文,重新复制粘贴后此问题消失;改后
运行时初始和终止点之间的顶点输出有问题,查到原因是数组下标有问题,改了之
后,一切正常。
4.用户手册(无)
5.测试结果:
6.程序清单:
#include
#include
#include"School.h"
#defineMAX1000
usingnamespacestd;
classTravel
{
private:
Datedate[15];//顶点数组
intdistance[15][15];//两顶点间的数组
intPath[15][15];//存放最短路径
intShortestDistance[15][15];//存放最短距离
voidFloyd();//Floyd算法
public:
Travel();//构造函数
~Travel(){}//析构函数
voidIntroduce(int);//景点介绍函数
voidScanf();//外部接口函数
voidShortDistance(int,int);//最短路径及距离函数
};
//构造函数
Travel:
:
Travel()
{
inti,j;
for(i=1;i<=14;i++)
{
date[i].num=i;//给顶点的编号赋值
switch(i)
{
case1:
strcpy(date[i].name,"杭电大门");
strcpy(date[i].introduce,"大门像桥,像船,据说是亚洲第
一长门,是杭电的标志性建筑之一。
");
break;
case2:
strcpy(date[i].name,"1教");
strcpy(date[i].introduce,"计算机学院所在地,里面没有教室,除了老师的办公室外全部都为实验室。
");
break;
case3:
strcpy(date[i].name,"2教");
strcpy(date[i].introduce,"电子信息学院所在地,阳光乐跑签到处。
");
break;
case4:
strcpy(date[i].name,"3教");
strcpy(date[i].introduce,"外国语学院所在地,机房所在地。
");
break;
case5:
strcpy(date[i].name,"6教");
strcpy(date[i].introduce,"理学院所在地,教室全天开放可供学生自修的地方");
break;
case6:
strcpy(date[i].name,"7教");
strcpy(date[i].introduce,"多媒体教室所在地,英语小班教室所在地。
");
break;
case7:
strcpy(date[i].name,"8教");
strcpy(date[i].introduce,"金工实习的地方。
");
break;
case8:
strcpy(date[i].name,"9教");
strcpy(date[i].introduce,"上选修课的地方。
");
break;
case9:
strcpy(date[i].name,"10教");
strcpy(date[i].introduce,"上选修课的地方。
");
break;
case10:
strcpy(date[i].name,"11教");
strcpy(date[i].introduce,"上必修课与选修课的地方,阳光乐跑签到处。
");
break;
case11:
strcpy(date[i].name,"12教");
strcpy(date[i].introduce,"上必修课与选修课的地方。
");
break;
case12:
strcpy(date[i].name,"图书馆");
strcpy(date[i].introduce,"外形像一本巨大的打开的书,是杭电标志性建筑之一。
");
break;
case13:
strcpy(date[i].name,"体育馆");
strcpy(date[i].introduce,"外形像一个飞碟,杭电的标志性建筑之一。
");
break;
case14:
strcpy(date[i].name,"学生活动中心");
strcpy(date[i].introduce,"学生进行课余活动所在地。
");
break;
default:
break;
}
}
for(i=1;i<=10;i++)
{
ShortestDistance[i][i]=0;//所有的两顶点最短距离初始化为0
}
for(i=1;i<=14;i++)
{
for(j=1;j<=14;j++)
{
distance[i][j]=MAX;//所有两顶点间的距离初始化为最大值
}
}
//有连接的顶点间的距离赋值
distance[1][1]=distance[2][2]=distance[3][3]=distance[4][4]=distance[5][5]=distance[6][6]=distance[7][7]=0;
distance[8][8]=distance[9][9]=distance[10][10]=distance[11][11]=distance[12][12]=distance[13][13]=distance[14][14]=0;
distance[1][2]=distance[2][1]=50;
distance[1][3]=distance[3][1]=60;
distance[2][3]=distance[3][2]=30;
distance[2][4]=distance[4][2]=30;
distance[3][5]=distance[5][3]=80;
distance[4][6]=distance[6][4]=60;
distance[5][6]=distance[6][5]=30;
distance[5][12]=distance[12][5]=20;
distance[6][12]=distance[12][6]=20;
distance[6][7]=distance[7][6]=30;
distance[7][12]=distance[12][7]=10;
distance[6][11]=distance[11][6]=50;
distance[4][9]=distance[9][4]=80;
distance[8][9]=distance[9][8]=10;
distance[8][10]=distance[10][8]=10;
distance[10][11]=distance[11][10]=10;
distance[11][9]=distance[9][11]=10;
distance[5][13]=distance[13][5]=20;
distance[7][13]=distance[13][7]=30;
distance[6][14]=distance[14][6]=10;
distance[11][14]=distance[14][11]=70;
}
//景点介绍函数
voidTravel:
:
Introduce(inti)
{
cout<<"景点代号:
"< "< "< } //Floyd算法 voidTravel: : Floyd() { inti,j,k; for(i=1;i<=14;i++) { for(j=1;j<=14;j++) { ShortestDistance[i][j]=distance[i][j];//最短距离用两点距离初始化 Path[i][j]=0;//两顶点间的路径点用编号0初始化 } } for(i=1;i<=14;i++)//起点的循环 { for(k=1;k<=14;k++)//中间点(即路径点的循环) { for(j=1;j<=14;j++)//终止点的循环 { //如果两点间的直接距离,比两点经过中间点的距离还要大,最短距离重新赋值,中间点到最短路径数组 if(ShortestDistance[i][j]>(ShortestDistance[i][k]+ShortestDistance[k][j])) { ShortestDistance[i][j]=ShortestDistance[i][k]+ShortestDistance[k][j]; Path[i][j]=k; Path[j][i]=k; } } } } } //输入函数 voidTravel: : Scanf() { inti,j; charn; cout<<"请输入查询项目编号I或D(I代表景点介绍,D代表查询两地间的最短距离及最短路径): "< cin>>n; cout< if(n=='I') { cout<<"请输入所要查询的景点代号(请输入1~14之间的数字): "< cin>>i; if(i>=1&&i<=14) { Introduce(i); } else { cout<<"无此景点信息! "< } } elseif(n=='D') { cout<<"请输入所要查询的两个景点编号(请输入1~14之间的数字): "< cin>>i>>j; if((i>=1&&i<=14)&&(j>=1&&j<=14)) { ShortDistance(i,j); } else { cout<<"无此景点信息,没有路径可查! "< } } else { cout<<"无此查询项! "< } } //求两地的最短距离及路径 voidTravel: : ShortDistance(inti,intj) { Floyd(); inttemp[14];//临时数组,用来对路径起颠倒顺序作用 intcount=0,k; inta,b; a=i; b=j; cout<"<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 试验报告 校园 导游 docx