




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程名称: 数据结构与算法 题目名称: 校园导游系统 学生学院: 数学与计算机科学系 专业班级: 2016级计算机科学与技术本科班 小组组长: 王明 小组成员: 王明 郑双凤 吕运发 指导老师: 熊小颖 老师 2017年10月15日目录一、设计目的3二、问题描述3三、基本要求3四、概要设计3五、主程序4六、测试数据136.1调试程序所用数据136.2程序的调试结果七、总结一、设计目的 随着现代社会生活节奏的加快,人们外出旅行以寻求放松的时间越来越多。考虑到游客不可能对所有景点都有所了解,因此可能无法找到游玩景点最省时,最高效的路径,而人工导游成本又过高,故使用C语言,基于数据结构中
2、图的相关算法开发了“南昌师范学院导游系统”。 开发本系统目的在于为来访我校的游客提供一条最短游览路径,本系统从实际出发,通过对校园平面图的分析,将其转化为数据并保存在系统中,因此系统提供的路径具有较大的可信性。二、问题描述 设计校园导游程序,为来访的客人提供服务,为来访我校的游客提供一条在游客当前位置到目的地的最短游览路径,找到游玩景点最省时,最高效的路径。三、 基本要求1. 假设有一所校园的平面图,所含景点不小于10个,请选择适当的坐标来表示出该图上的各个景点。2. 为来访的客人提供从当前位置到其他景点的最短路径的咨询;3. 必须具有校园平面图的修改和扩充功能(即某些景点坐标的修改和景点个数
3、的增加)。四、 概要设计算法思路本设计的重难点在于问题二的解决。利用了弗洛伊德算法函数设计Floyd() 本算法在设计时参考了数据结构C语言版一书中有关Floyd算法的介绍,同时借鉴了如今网上流行的设计方式。之所以选择本算法来实现计算最短路径,原因在于本算法容易理解,可以算出任意两个节点之间的最短距离,代码编写简单。但是,本算法缺点在于时间复杂度过高,不适合用于计算大量数据。Floyd算法首先将两景点间路径长度数据存储于数组Dvw中,而后使用一个三维数组用于存放最短路径所经过的顶点,接下来使用三重循环判断两景点之间直接路径是否大于间接路径,若大于,则将三维数组中存放的顶点信息更改为
4、简介路径所经过的顶点信息。以上部分完成后,当用于标记输入数据是否合法的flag=1时,输出错误信息,提示用户重新输入,当输入数据合法时,输出以上程序得到结果。五、 主程序#include<stdio.h>#include<stdlib.h>#define MAX_VERTEX_NUM 100 /最大顶点数#define MAX_INT 10000 /无穷大 typedef int AdjType; typedef struct int piMAX_VERTEX_NUM;/存放v到vi的一条最短路径 int end;PathType;typedef char VType;
5、 /设顶点为字符类型typedef struct VType VMAX_VERTEX_NUM; /顶点存储空间 AdjType AMAX_VERTEX_NUMMAX_VERTEX_NUM; /邻接矩阵 MGraph;/邻接矩阵表示的图/Floyd算法/求网G(用邻接矩阵表示)中任意两点间最短路径 /D是最短路径长度矩阵,path最短路径标志矩阵 void shortdistance(MGraph * G,int pathMAX_VERTEX_NUM,int DMAX_VERTEX_NUM,int n) int i,j,k; for(i=0;i<n;i+)/初始化 for(j=0;j<
6、;n;j+) if(G->Aij<MAX_INT) pathij=j; else pathij=-1; Dij=G->Aij; for(k=0;k<n;k+)/进行n次试探 for(i=0;i<n;i+) for(j=0;j<n;j+) if(Dij>Dik+Dkj) Dij=Dik+Dkj;/取小者 pathij=pathik;/改Vi的后继 for(i=0;i<n;i+)/输出每对顶点间最短路径长度及最短路径 for(j=0;j<n;j+) printf("V%d到V%d的最短长度:",i,j); printf(&q
7、uot;%dt",Dij);/输出Vi到Vj的最短路径长度 k=pathij;/取路径上Vi的后续Vk if(k=-1) printf("There is no path between V%d and V%dn",i,j);/路径不存在 else printf("最短路径为:"); printf("(V%d",i);/输出Vi的序号i while(k!=j)/k不等于路径终点j时 printf(",V%d",k);/输出k k=pathkj;/求路径上下一顶点序号 printf(",V%d)n
8、",j);/输出路径终点序号 printf("n"); int introduce(char scenery)getchar();printf("请输入景点对应的大写字母n");scanf("%c",&scenery);switch(scenery)default:printf("没有该景点n");case 'A':printf("图书馆,距离南大门100米n");break;case 'B':printf("实验楼,距离南大门200米
9、n");break;case 'C':printf("理科楼,理科类学生上课地点n");break;case 'D':printf("女宿舍楼,南昌师范学院的女孩子的家n");break;case 'E':printf("男宿舍楼,南昌师范学院的男孩子的家n");break;case 'F':printf("大学生活动中心,大学生活动休闲场所n");break;case 'G':printf("田径场,运动会举办场地
10、n");break;case 'H':printf("逸夫大礼堂,各种活动举办场所n");break;case 'I':printf("体育馆,正在建设中n");break;case 'J':printf("综合楼,领导办公处n");break;case 'K':printf("北大门,学校出口n");break;return 0; int main()char kk; char scenery; int i,j,k,v='A'
11、;,m=11;/v为起点,n为顶点个数 MGraph G; int pathMAX_VERTEX_NUMMAX_VERTEX_NUM;/v到各顶点的最短路径向量 int DMAX_VERTEX_NUMMAX_VERTEX_NUM;/v到各顶点最短路径长度向量 char VMAX_VERTEX_NUM='A','B','C','D','E','F','G','H','I','J','K' int aMAX_VERTEX_N
12、UMMAX_VERTEX_NUM= /初始化 0,50,200,100,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT, 50,0,100,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT, 200,100,0,MAX_INT,MAX_INT,100,50,MAX_INT,MAX_INT,MAX_INT,MAX_INT, 100,MAX_INT,MAX_INT,0,500,200,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_I
13、NT, MAX_INT,MAX_INT,MAX_INT,500,0,300,MAX_INT,300,MAX_INT,300,500, MAX_INT,MAX_INT,100,200,300,0,400,200,100,MAX_INT,MAX_INT, MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,400,0,100,300,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,200,200,100,0,MAX_INT,400,MAX_INT,MAX_INT,MAX_INT,50,MAX_INT,MAX_INT,100
14、,300,MAX_INT,0,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,MAX_INT,300,MAX_INT,MAX_INT,400,MAX_INT,0,300,MAX_INT,MAX_INT,MAX_INT,MAX_INT,500,MAX_INT,MAX_INT,MAX_INT,MAX_INT,300,0 ; for(i=0;i<m;i+) for(j=0;j<m;j+) G.Aij=aij; printf("*n");printf("* *n");printf("* *n");p
15、rintf("* 欢迎使用南昌师范学院校园咨询系统!*n");printf("* *n "); printf("* *n "); printf("*n");printf("n");while(1)printf("1.景点信息查询请按“1”键:n");printf("2.景点最短路径查询(弗洛伊德算法)请按“2”键:n");printf("3.景点最短路径查询(迪杰斯特拉算法)请按“3”键:n");printf("4.校内景点地
16、图查询请按“4”键:n");printf("5.退出系统请按“5”键 :n");printf("请选择:n");scanf("%c",&kk);switch(k)case'1':printf("景点介绍查询n");introduce(scenery);break;case'2':printf("景点最短路径查询(弗洛伊德算法)n");shortdistance(&G,path,D,11);break;case'5':printf("谢谢使用!n");exit(0);return 0;六、 测试数据6.1调试程序所用数据6.2程序的调试结果七、 总结 经过小组同学的努力,我们终于结束了这次的课程设计,虽然我们尽了很大的努力,但是其中仍显现出许多的不足。其中在处理查询两景点最短路径这一问题时:一开始对于题目的阅读不够仔细,将随机的当前位置当成了,一进校门的位置作为与其他建筑物的路径距离。浪费了一些时间,之后与重新思考思路。所以由此发现对于需求的正确分析确实很重要。另外经过这次课程设计,我对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河套学院《装饰工程管理与现场实训》2023-2024学年第二学期期末试卷
- 天津商业大学宝德学院《环境研究法》2023-2024学年第二学期期末试卷
- 长白山职业技术学院《专业综合实践2(智能电子系统设计与制作)》2023-2024学年第二学期期末试卷
- 山东财经大学燕山学院《中医学基础1》2023-2024学年第二学期期末试卷
- 抚顺职业技术学院《建筑制图与AutoCAD》2023-2024学年第二学期期末试卷
- 乌兰察布医学高等专科学校《基因工程制药》2023-2024学年第二学期期末试卷
- 四川工商学院《材料成型装备及自动化》2023-2024学年第二学期期末试卷
- 廊坊职业技术学院《产品设计表达基础》2023-2024学年第二学期期末试卷
- 上海师范大学天华学院《电子电路基础实验(下)》2023-2024学年第二学期期末试卷
- 三江学院《高等化学(Ⅷ)》2023-2024学年第二学期期末试卷
- 儿童行为干预效果评估的机器学习方法-洞察阐释
- 区块链考试试题及答案
- 演讲口才考试试题及答案
- 2025-2030中国氟化工行业市场发展现状及发展趋势与投资前景研究报告
- 2025年湖北省武汉市高考地理调研试卷(2月份)
- SL631水利水电工程单元工程施工质量验收标准第3部分:地基处理与基础工程
- 新22J01 工程做法图集
- 2024年山东省济南市中考英语试题卷(含答案解析)
- 中国陶瓷欣赏智慧树知到期末考试答案章节答案2024年中国地质大学(武汉)
- 2019年一级注册消防工程师继续教育三科题库+答案
- 盾构电瓶车安全管理专题培训PPT课件
评论
0/150
提交评论