ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:218.34KB ,
资源ID:4142303      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4142303.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(校园导航系统算法及分析课程设计.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

校园导航系统算法及分析课程设计.docx

1、校园导航系统算法及分析课程设计算法设计与分析课程设计 题目: 校园导航问题 文档: 物联网工程 学院 物联网工程 专业学 号 学生姓名 班 级 物联网1101 二一三年十二月设计要求:设计你的学校的平面图,至少包括10个以上的场所,每两个场所间可以有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路(最短路径)。本系统为用户提供以下功能: (一)、查询了解学校概况,为导游参观者提供关于学校的相关信息。(二)、查询校园各个场所和景点信息; (三)、为导游者或外来人员参观人员提供校园交通信息,方便用户走访学校。完成需要操作时,退出系统 校园导航查询系统的开发方法总结如下: (1) 需求

2、分析,了解学校各个场所与场所或者是各个景点与景点之间的信息,路径和距离,考虑该如何设计才能满足用户需求。(2) 概要设计,对调查得到的数据进行分析,根据其要求实现的功能分析系统结构和界面将实现的基本功能。(3) 详细设计,设计系统界面并编辑实现其各个功能的代码。(4) 调试分析,在设计完成后,调试系统运行的状况,修改完善系统,然后进行测试。一、需求分析1学校以及各景点介绍模块采用一维数组将学校景点依次排放好编号G.vexi.number=i 在选择校园介绍的时候,弹出G.vex0校园简介。在选择各景点信息的时候,可按编号查询2查询最短路径(主要)查出出发地到想要到达的景点的最短路径,初步构想采

3、用最经典的迪杰斯特拉算法最短路径函数3查询各点距离将所有景点的距离显示出来。4主菜单页面显示提供使用者选择功能界面,按照提示进行操作。5退出完成需要操作时,退出系统校园导航系统模式图2、概要设计2.1算法设计说明 校园导航模型是由各个景点和景点以及场所和场所之间的路径组成的,所以这完全可以用数据结构中的图来模拟。用图的结点代表景点或场所,用图的边代表景点或场所之间的路径。所以首先应创建图的存储结构。结点值代表景点信息,边的权值代表景点间的距离。结点值及边的权值采用图存储。本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。计

4、算路径长度,最短路线和最佳路径时可分别用迪杰斯特拉(Dijkastra)算法和哈密而顿回路算法实现。最后switch选择语句选择执行浏览景点信息或查询最短路径和距离。 2.1.1学校以及各景点介绍模块 采用了图的邻接矩阵存储结构,首先初始化每一个景点名称(一维数组)for(i=1;iG.vexnum;+i) G.vexi.number=i 景点介绍功能流程图2.1.2查询最短路径(主要) 算法的主要思想是按路径长度递增的次序产生最短路径的算法。中心思想是假设s为已求得最短路径的终点的集合,则下一条最短路径或者是弧(v,x)或者是中间经过s中是顶点而最后到达顶点x的路径。(1)arcs表示弧上的

5、权值。若不存在,则置arcs为。S为已找到从v出发的最短路径的终点的集合,初始状态为空集。那么,从v出发到图上其余各顶点vi可能达到的最短路径长度的初值为D=arcsLocate Vex(G,v),i viV(2)选择vj,使得Dj=MinD | viV-S (3修改从v出发到集合V-S上任一顶点vk可达的最短路径长度路径查询流程图 2.1.3查询各点距离由于图的结构比较复杂,任意两个点之间都可能存在联系。因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,但是却可以借助数组的数据类型表示元素之间的关系。2.1.4主函数循环体用开关语句,该语句的条件值ck是当用户选择菜单通过调用主菜单

6、函数得到,返回值整数作开关语句的条件。根据该值调用相应的各功能函数,同时设置一个退出程序点,执行完用户的某项功能后继续显示菜单,当返回值为e时函数结束程序,以免造成死循环。2.2数据结构与函数考虑2.2.1数据结构定义结构体类型,将多个相关的变量包装成为一个整体使用。#define Max 32767 #define NUM 20 自定义顶点的类型typedef struct VertexType int number; / 景点编号char *sight;/ 景点名称VertexType;自定义图的类型typedef structVertexType vexNUM; / 图中的顶点,即为景点

7、int arcsNUMNUM; / 图中的边,即为景点间的距离int vexnum; / 顶点数MGraph;把图定义为全局变量MGraph G;int PNUMNUM; 辅助变量存储最短路径长度long int DNUM;2.2.2 使用的系统头文件#include stdio.h /*I/O 函数*/ #include stdlib.h /*使用system()exit()atoi()malloc()free()函*/ #include string.h /*字符串函数,strcpy()strlen()strcmp()*/ 三、主程序 #include #include #include

8、#define Max 32767 #define NUM 20 typedef struct VertexType int number; char *sight; VertexType; typedef struct VertexType vexNUM; int arcsNUMNUM; int vexnum; MGraph; MGraph G; int PNUMNUM; long int DNUM; void CreateMGraph(int v)/创建图的函数,v是函数入口 int i,j; G.vexnum=v; for(i=1;iG.vexnum;+i) G.vexi.number=

9、i; G.vex0.sight=各个地点名字; G.vex1.sight=江南大学校北门; G.vex2.sight=第一食堂; G.vex3.sight=江南大学东偏门; G.vex4.sight=设计学院; G.vex5.sight=体育中心; G.vex6.sight=物联网工程学院; G.vex7.sight=图书馆; G.vex8.sight=江南大学东门; G.vex9.sight=国家重点实验室; G.vex10.sight=第二教学楼; G.vex11.sight=第四食堂; G.vex13.sight=臻善楼; G.vex12.sight=江南大学南门; for(i=1;iG

10、.vexnum;+i) for(j=1;jG.vexnum;+j) G.arcsij=Max; G.arcs12=G.arcs21=200; G.arcs13=G.arcs31=210; G.arcs15=G.arcs51=521; G.arcs24=G.arcs42=299; G.arcs25=G.arcs52=450; G.arcs23=G.arcs32=869; G.arcs35=G.arcs53=620; G.arcs38=G.arcs83=756; G.arcs45=G.arcs54=355; G.arcs46=G.arcs64=221; G.arcs57=G.arcs75=225;

11、 G.arcs58=G.arcs85=900; G.arcs67=G.arcs76=280; G.arcs69=G.arcs96=241; G.arcs78=G.arcs87=440; G.arcs710=G.arcs107=350; G.arcs810=G.arcs108=570; G.arcs910=G.arcs109=1300; G.arcs911=G.arcs119=998; G.arcs912=G.arcs129=1200; G.arcs1011=G.arcs1110=639; G.arcs1012=G.arcs1210=805; G.arcs1112=G.arcs1211=283;

12、 G.arcs1213=G.arcs1312=296; void Map()/地图展示函数 printf(t *江南大学大学地图导航系统* n); printf( 1 江南大学北大门 n); printf( n); printf( n); printf( 2第一食堂 3江南大学东偏门 n); printf( n); printf( n); printf( 4设计学院5体育中心 n); printf( n); printf( n); printf( n); printf( 6物联网工程学院7图书馆 8江南大学东门 n); printf( n); printf( n); printf( n); p

13、rintf( 9国家重点实验室 10第二教学楼 n); printf( n); printf( n); printf( n); printf( n); printf( 11第四食堂 n); printf( n); printf( 13臻善楼12江南大学南门 n); void Info()/资料介绍函数 printf(1 江南大学校北大门 :这是江南大学最有名的大门,是一座充满历史感的高大的牌坊,正上面写着“江南大学”四个大字,背面写着“江南第一学府”六个字n); printf(2 江南大学第一食堂n); printf(3 江南大学东偏门: n); printf(4 设计学院:n); print

14、f(5 体育中心:n); printf(6 物联网工程学院:n); printf(7 图书馆:高达15层的雄伟的图书馆 n); printf(8 江南大学东门: n); printf(9 国家重点实验室: n); printf(10 第二教学楼: n); printf(11 第四食堂: n); printf(13 臻善楼: n); printf(12 江南大学南门: n);void ShortestPath(int num) / 迪杰斯特拉算法最短路径函数num为入口点的编号 int v,w,i,t; / i、w和v为计数变量 int finalNUM; int min; for(v=1;vN

15、UM;v+) finalv=0; / 假设从顶点num到顶点v没有最短路径 Dv=G.arcsnumv;/ 将与之相关的权值放入D中存放 for(w=1;wNUM;w+) / 设置为空路径 Pvw=0; if(Dv32767) /存在路径 Pvnum=1; /存在标志置为一 Pvv=1; /自身到自身 Dnum=0; finalnum=1; /初始化num顶点属于S集合/ 开始主循环,每一次求得num到某个顶点的最短路径,并将其加入到S集合for(i=1;iNUM;+i) /其余G.vexnum-1个顶点min=Max; / 当前所知离顶点num的最近距离for(w=1;wNUM;+w) if

16、(!finalw) / w顶点在v-s中if(Dwmin) / w顶点离num顶点更近 v=w;min=Dw; / 更新当前最短路径极其距离finalv=1; / 离num顶点更近的v加入到s集合for(w=1;wNUM;+w) if(!finalw&(min+G.arcsvw)Dw) / 不在s集合,并且比以前所找到的路径都短就更新当前路径Dw=min+G.arcsvw; for(t=0;tNUM;t+)Pwt=Pvt;Pww=1; char Menu()/应用主界面显示函数 char c; int flag; do system(cls); flag=1; Map(); printf(tt

17、欢迎使用江南大学导航图系统n); printf(tt 1.查询地点之间最短路径 n); printf(tt 2.江南大学景点介绍n); printf(tt e.退出 n); printf(ttt请输入您的选择:); scanf(%c,&c); if(c=1|c=2|c=e)/如果输入为1,2,E中的一个,则返回C flag=0; while(flag); return c;void Display(int sight1,int sight2)/最短距离显示函数 int a,b,c,d,q=0; a=sight2; if(a!=sight1) printf(nt从%s到%s的最短路径是,G.ve

18、xsight1.sight,G.vexsight2.sight); printf(t(最短距离为 %d.m)nnt,Da); printf(t%s,G.vexsight1.sight); d=sight1; for(c=0;cNUM;+c) Pasight1=0; for(b=0;bNUM;b+) if(G.arcsdb%s,G.vexb.sight); q=q+1; Pab=0; d=b; if(q%8=0) printf(n); void main()/主界面最短路线查询显示函数 int v0,v1; char e; char ck; CreateMGraph(NUM); do syste

19、m(cls); ck=Menu(); switch(ck) case 1: gate: system(cls); Map(); do printf(nnttt请选择出发地序号(113):); scanf(%d,&v0); if(v013) printf(nntttt输入错误!n); while(v013); do printf(ttt请选择目的地序号(113):); scanf(%d,&v1); if(v113|v1=v0) printf(nntttt输入错误!n); while(v113|v1=v0); ShortestPath(v0); Display(v0,v1); printf(nnt

20、ttt按回车键继续,按e退回首页n); getchar(); scanf(%c,&e); if(e=e) break; goto gate; case2: system(cls); Info(); printf(nntttt按回车键返回首页.n); getchar(); getchar(); break; ; while(ck!=e);四、程序调试及运行结果贴图5、总结通过这次设计,是我得以更好的掌握C语言的编程,对一些算法思想和实现方法有了更深的了解。在设计中,出现了一系列的问题,好多次都差点坚持不下去,但最终还是完成了!当程序编译并且运行成功的那一刻,真的是非常的激动。感谢老师平时上课时的教导,可以使我更好的完成这次作业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1