校园导航系统课程设计

合集下载

校园导航程序课程设计

校园导航程序课程设计

校园导航程序课程设计一、课程目标知识目标:1. 学生能理解并掌握校园导航程序的基本原理和功能。

2. 学生能了解并运用编程语言(如Python)实现基本的地图展示、路径规划和信息查询功能。

3. 学生能掌握基础的地理信息系统(GIS)知识,并将其应用于校园导航程序设计。

技能目标:1. 学生能运用编程技能,设计并开发出一个简单的校园导航程序。

2. 学生能通过小组合作,进行需求分析、功能设计和程序测试,提高团队协作能力。

3. 学生能运用问题解决策略,解决在编程和调试过程中遇到的问题。

情感态度价值观目标:1. 学生能培养对编程和地理信息科学的兴趣,激发创新意识。

2. 学生能在课程学习过程中,体验编程带来的成就感,增强自信心。

3. 学生能认识到科技在现实生活中的应用,理解科技对人类生活的积极作用,培养社会责任感。

课程性质:本课程为信息技术与地理学科融合的实践性课程,旨在培养学生的编程能力、地理信息系统应用能力和团队协作能力。

学生特点:六年级学生具有一定的编程基础和地理知识,对新鲜事物充满好奇,喜欢动手实践,具备一定的自主学习能力。

教学要求:注重理论与实践相结合,关注学生个体差异,鼓励学生积极参与,充分调动学生的主观能动性。

将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 校园导航系统概述:介绍校园导航系统的基本概念、功能和应用场景,让学生对课程内容有一个整体的认识。

相关教材章节:信息技术课本第五章第二节“地理信息系统及其应用”。

2. 编程语言基础:回顾Python编程基础知识,重点复习变量、条件语句、循环语句和函数等基本概念。

相关教材章节:信息技术课本第二章“Python编程基础”。

3. 地理信息系统(GIS)知识:讲解GIS的基本原理,介绍地图坐标系、空间数据结构等基础知识。

相关教材章节:地理课本第八章第三节“地理信息系统及其应用”。

4. 校园导航程序设计:a. 需求分析:组织学生进行小组讨论,明确校园导航程序的功能需求。

校园地图系统课程设计

校园地图系统课程设计

校园地图系统课程设计一、课程目标知识目标:1. 学生能理解并掌握校园地图系统的基本概念和功能,了解其在生活中的应用。

2. 学生能运用所学的地理信息系统(GIS)知识,分析并解决校园内实际问题。

3. 学生掌握地图比例尺、方向、图例等基本要素,并能在校园地图中进行正确应用。

技能目标:1. 学生能通过实际操作,掌握使用校园地图系统查找地点、规划路径等基本技能。

2. 学生具备利用GIS软件绘制校园地图的基本能力,能独立完成简单的地图制作。

3. 学生能运用地图思维,分析校园空间布局,提高解决问题的能力。

情感态度价值观目标:1. 学生通过学习校园地图系统,培养对地理信息的兴趣,提高对现实世界的观察能力和空间思维能力。

2. 学生在学习过程中,树立正确的地理观念,关注地理信息技术的最新发展。

3. 学生通过团队合作完成课程任务,培养团队协作精神和沟通能力,增强对学校环境的责任感和主人翁意识。

本课程针对初中年级学生,结合校园地图系统,注重培养学生的地理信息素养和实际操作能力。

课程性质为实践性、探究性,教学要求强调学生的参与度和动手实践。

通过本课程的学习,学生将能够具备运用地图知识解决实际问题的能力,同时培养对地理学科的兴趣和热爱。

二、教学内容1. 校园地图基本概念:介绍地图的定义、功能、分类以及校园地图的特点。

教材章节:《地理》第五章第一节“地图与地图制作”2. 地图三要素:详细讲解地图的比例尺、方向、图例等基本要素。

教材章节:《地理》第五章第二节“地图的阅读与使用”3. 地理信息系统(GIS)基本操作:学习GIS软件的基本功能,包括地图浏览、查询、分析等。

教材章节:《地理》第五章第三节“地理信息系统及其应用”4. 校园地图绘制:学习使用GIS软件绘制校园地图,掌握简单的地图制作方法。

教材章节:《地理》第五章第四节“地图编制与设计”5. 实践活动:分组进行校园地图绘制和实际问题分析,如规划校园参观路线、分析校园设施分布等。

课程设计校园导航系统

课程设计校园导航系统

课程设计校园导航系统一、课程目标知识目标:1. 学生能理解校园导航系统的基本概念,掌握其构成要素和应用场景。

2. 学生能描述校园导航系统中常用的定位技术和路径规划算法。

3. 学生了解地理信息系统(GIS)在校园导航系统中的作用,并掌握基本操作方法。

技能目标:1. 学生能够运用所学知识,设计并实现一个简单的校园导航系统。

2. 学生能够运用GIS软件进行地图数据处理、分析和可视化。

3. 学生能够通过小组合作,解决实际校园导航中的问题,提高团队协作能力。

情感态度价值观目标:1. 学生对校园导航系统产生兴趣,认识到科技在生活中的重要作用。

2. 学生在探究过程中,培养勇于尝试、不断优化的科学精神。

3. 学生通过解决实际问题,增强对学校环境的责任感,提高爱护公共设施的意识。

本课程针对初中年级学生,结合信息技术和地理学科,以实用性为导向,培养学生运用科技手段解决实际问题的能力。

课程设计注重理论与实践相结合,充分考虑学生的年龄特点和认知水平,通过小组合作、动手实践等方式,激发学生兴趣,提高学生的综合素养。

在教学过程中,教师需关注学生的学习进度,及时调整教学策略,确保课程目标的实现。

二、教学内容本章节教学内容主要包括以下几部分:1. 校园导航系统概述:介绍校园导航系统的基本概念、构成要素和应用场景,对应教材中“地理信息系统及其应用”章节。

2. 定位技术:讲解全球定位系统(GPS)、无线局域网(WLAN)等定位技术在校园导航系统中的应用,结合教材中“定位技术及其发展”章节。

3. 路径规划算法:介绍Dijkstra、A*等路径规划算法,分析其在校园导航系统中的作用,对应教材中“路径规划与优化”章节。

4. 地理信息系统(GIS)操作:学习GIS软件的基本操作,包括地图数据处理、分析和可视化,结合教材中“GIS软件与应用”章节。

5. 实践项目:设计并实现一个简单的校园导航系统,包括地图数据采集、路径规划、导航功能等,分阶段完成,对应教材中“实践项目与应用”章节。

数据结构课程设计_校园导航系统 _课程设计报告

数据结构课程设计_校园导航系统 _课程设计报告

南京工程学院课程设计说明书(论文)题目校园导航系统课程名称数据结构院系通信工程学院专业信息工程班级学生姓名学号设计地点指导教师设计起止时间:2008 年12月29 日至年月日目录1.课程设计题目 (1)2.软件功能描述 (1)3.软件总体设计 (1)3.1数据结构描述与定义 (1)3.2模块设计 (3)4.测试结果与分析 (4)5.课程设计总结 (5)附录:源程序清单 (6)1.课程设计题目校园导航系统2.软件功能描述在近一个星期的努力下,我编写的校园导航系统软件终于能够成功完成。

采用工程思想,将系统共分一下几个模块:数据结构定义模块、导航图建立模块、求最短路径模块、主菜单;下面是具体各功能简单的实际应用:➢数据结构定义模块:模块定义了导航图中各个节点的基本结构类型,主要采用邻接矩阵的存储结构来真实反映各节点到其他所有节点的路径长度(权值大小)。

➢导航图建立模块:采用上述结构体类型对导航图中每个节点进行赋值。

包括:各定点的名称(地点名),各个节点到其他所有节点的真实路径长度(赋权值)。

➢求最短路径模块:本模块的基本思想是采用迪杰斯特拉算法求最短路径。

次模块是本校园导航系统的核心模块,求两点间的最短路径与求一点到其他所有点最短路径两个子功能均是在最短路径算法模块的基础上进行调用,进而实现导航功能。

➢主菜单:主菜单中主要是显示导航图中的所有导航节点,能够快速方便的对各个地点进行导航。

以上程序的几个模块,构成了校园导航系统的基本组成部分,程序运行良好,达到了课程设计的基本要求。

由于所学知识有限,功能各个方面还有欠妥之处,希望得到指出与改正。

3.软件总体设计3.1数据结构描述与定义1.节点数据结构类型:#define MAX_V 30 //最大顶点个数typedef struct{char* vexs[MAX_V]; //顶点向量int arcs[MAX_V][MAX_V];//邻接矩阵int vexnum,arcnum;//图的当前顶点数和弧数}MGraph;2.创建导航图函数:int CreateUDN(MGraph &G)函数描述:主要将每个节点进行命名、每个顶点到其他所有定点的路径值用邻接矩阵进行存储。

校园导航系统课程设计报告

校园导航系统课程设计报告

题目石铁大校园导航系统学院信息科学与技术学院专业计算机科学与技术学号********学生姓名刘铸辉指导教师姓名陈娜日期:2013-8-31一.题目与要求实习一校园导游程序[ 问题描述]用无向网表示学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。

要求能够回答有关景点介绍、游览路径等问题。

游客通过终端可询问:(1 )从某一景点到另一景点的最短路径。

(2 )游客从公园进入,选取一条最佳路线。

(3 )使游客可以不重复地浏览各景点,最后回到出口(出口就在入口旁边)。

[ 基本要求](1 )将导游图看作一张带权无向图,顶点表示公园的各个景点,边表示各景点之间的道路,边上的权值表示距离.为此图选择适当的数据结构。

(2 )把各种路径都显示给游客,由游客自己选择浏览路线。

(3 )画出景点分布图于屏幕上。

[ 实现提示](1 )构造一个无向图G 并用邻接矩阵来存储。

(2 )利用迪杰斯特拉算法来计算出起点到各个顶点之间的最短路径用二维数组p[i][]来记录,最短路径长度就用一维数组d[i] 存放;i 的范围:0 ~20 。

(3 )一维数组have[] 是用来记录最短路径出现顶点的顺序。

(4 )根据起点和终点输出最短路径和路径长度。

二.需求分析本校园导航系统由C语言编写,主要掌握最短路径的实现方法,以及构造无向图G并用邻接矩阵来存储,掌握迪杰斯特拉算法来算最短路径。

1.输入的形式和输出的范围:2.输出的形式:3.程序所能到达的功能:A.图中任意景点的相关信息查询B.任意两个景点间的最短路径C.任意两个景点间的所有路径D.增加有关景点和道路的信息E.删除更新有关景点和道路的信息F.更新有关景点和道路的信息G.显示全景H.退出该系统三.概要设计(1)本程序包含了10个函数①主函数main()②显示操作菜单函数menu()③景点名称及其简介设置函数picture(void)④图中任意景点相关信息查询函数checkscene(algraph g)⑤图中任意两个景点间的最短路径Dijkstra(algraph g)⑥任意两个景点间的全部路径alldistance(algraph g)⑦增加有关景点和道路的信息addscene(algraph g)⑧删除有关景点和道路的信息delscene(algraph g)⑨更新有关景点和道路的信息change(algraph g)⑩显示全景chang()(2)各函数之间的关系menu()picture(void)checkscene(algraph g)Dijkstra(algraph g)main() alldistance(algraph g)addscene(algraph g)delscene(algraph g)change(algraph g)chang()四.详细设计实现概要设计中定义的所有的数据类型,对每个操作给出伪代码,对主程序和其他模块也都需要写出伪代码算法。

导航地图系统课程设计

导航地图系统课程设计

导航地图系统课程设计一、课程目标知识目标:1. 学生能够理解导航地图系统的基本概念,掌握其工作原理和功能特点。

2. 学生能够描述导航地图系统中常用的坐标系和地图投影方法,并解释其应用场景。

3. 学生能够了解导航地图的数据来源和更新方式,认识到地图数据的准确性和时效性。

技能目标:1. 学生能够运用导航地图系统进行定位和路径规划,解决实际出行问题。

2. 学生能够操作导航设备,进行地图浏览、搜索地点和获取路线信息等基本操作。

3. 学生能够分析导航地图系统中的误差来源,并提出改进措施,提高导航准确度。

情感态度价值观目标:1. 学生培养对导航地图系统的兴趣,认识到其在日常生活和国民经济发展中的重要性。

2. 学生能够关注导航地图系统的技术发展,积极了解新兴导航技术及其应用。

3. 学生在合作学习过程中,培养团队精神和沟通能力,提高解决问题的自信心。

课程性质:本课程为信息技术与地理学科相结合的综合性课程,旨在培养学生的地理信息素养和实际应用能力。

学生特点:六年级学生具备一定的地理知识和计算机操作技能,对新兴技术和实际应用有较高的兴趣。

教学要求:注重理论与实践相结合,鼓励学生动手实践和合作探究,提高学生的实际操作能力和创新思维。

将课程目标分解为具体的学习成果,为后续教学设计和评估提供依据。

二、教学内容1. 导航地图系统概述- 了解导航地图系统的定义、发展历程和未来发展趋势。

- 掌握导航地图系统的基本功能,如定位、路径规划、交通信息查询等。

2. 坐标系与地图投影- 学习地球坐标系、平面坐标系等常用坐标系及其转换方法。

- 掌握地图投影的基本原理,了解墨卡托投影、高斯-克吕格投影等常用地图投影方法。

3. 导航地图数据- 介绍导航地图数据来源、采集方法、更新周期及准确性。

- 分析导航地图数据在实际应用中的重要性,如实时交通信息、地点详细信息等。

4. 导航设备与操作- 学习导航设备的种类、功能及使用方法,如智能手机、车载导航仪等。

《校园导航系统》课程设计报告

《校园导航系统》课程设计报告

《校园导航系统》课程设计报告姓名:郭璇学号:110263100129 班级:10网络专业:网络工程指导教师:唐轶媛蒋荣萍时间:2012/6/25-2012/7/6信息科学与工程学院目录摘要 (1)1.题目 (1)2.概要设计 (1)3.调试分析 (15)4.参考文献 (15)1.题目校园导航系统设计一个校园导游程序,后台操作:1、操作员信息管理如修改密码等2、能根据学校的规模进行添加景点信息、修改景点信息等功能,3、若临时有交通管制,能进行交通管制的设置和撤销(如某某时间段那条路进行那个方向的交通管制等)前台为来访的客人提供各种信息查询服务:1、设计学校的校园平面图,所含景点不少于10个。

以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

2、为来访客人提供图中任意景点相关信息的查询。

3、提供途中任意景点问路查询,即求任意两个景点间的一条最短的简单路径。

1.1 需求分析设计一个校园导航系统,导航系统又分为游客和管理员。

要进行管理操作还是游客操作由用户自己选择管理员的操作:修改景点信息、增加景点信息、交通管制等。

游客的操作:查看景点信息和查最短路径。

2.概要设计景点的信息由一维数组存放,景点关系由二维数据来存放景点的信息和关系从文件读取,进而初始化typedef struct //保存单个景点信息的结构体{char code[10]; //存放景点代码char name[20]; //存放景点名称char instruction[100]; //存放景点简介}ViewPoint;typedef struct //存放景点关系的二维数组{int edges[MAXV][MAXV]; //两景点间的距离int number; //景点的数量ViewPoint V[MAXV]; //保存景点信息的结构体数组}MGraph;2.1 流程图↓↓↓↓↓↓↓2.2详细设计void MainMenu(); 主菜单,写界面操作的函数。

校园导航定位系统课程设计

校园导航定位系统课程设计

校园导航定位系统课程设计一、课程目标知识目标:1. 理解并掌握校园导航定位系统的基本原理与功能;2. 学习并运用相关的地理信息系统(GIS)知识,进行校园地图的解读与分析;3. 了解全球定位系统(GPS)及其在校园导航中的应用。

技能目标:1. 能够运用校园导航定位系统,进行校园内位置信息的查找与路径规划;2. 培养学生团队协作能力,通过小组讨论、分享,共同解决校园导航中遇到的问题;3. 提高学生的实际操作能力,学会使用相关设备和技术进行定位与导航。

情感态度价值观目标:1. 培养学生对地理信息科学的兴趣,激发学生探索未知、勇于创新的精神;2. 强化学生的环保意识,倡导绿色出行,提高学生对校园环境的保护意识;3. 培养学生热爱学校、关爱他人的情感,提高学生社会责任感。

本课程针对中学生设计,结合学科特点,以实用性为导向,充分考虑学生年龄特点和认知水平。

通过本课程的学习,使学生能够将所学知识应用于实际生活,提高解决问题的能力,同时培养良好的情感态度价值观。

课程目标具体、可衡量,为后续教学设计和评估提供明确方向。

二、教学内容1. 校园导航定位系统原理介绍- 导航定位技术的发展背景与现状- 校园导航定位系统的组成与工作原理2. 地理信息系统(GIS)知识- 校园地图的基本要素与解读- GIS在校园导航中的应用3. 全球定位系统(GPS)应用- GPS的原理与功能- GPS在校园导航中的实际应用4. 实践操作与案例分析- 校园导航定位设备的认识与使用- 实际操作:校园内路径规划与导航- 案例分析:解决校园导航中遇到的问题5. 团队协作与讨论分享- 小组讨论:探讨校园导航定位系统的优缺点- 分享经验:介绍个人在校园导航中的实用技巧教学内容依据课程目标,结合教材章节,确保科学性和系统性。

教学大纲明确,教学内容安排合理,注重理论与实践相结合,充分调动学生的积极性与参与度。

通过本章节的学习,使学生深入理解校园导航定位系统的相关知识,提高实际操作能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

校园导航课程设计报告书专业:计算机科学与技术课程设计名称:《数据结构课程设计》题目:校园导航问题班级:学号:姓名:同组人员:指导老师:完成时间:2012年2月17日摘要校园导航问题是基于校园中的不同的景点,从陌生人的角度,为来往的客人提供校园景点相关信息的查询以及为来往的客人提供校园中任意景点的问路查询,以便客人能用最短的时间从某一地点到达想要去的地方。

大大节约了旅客参观校园的时间。

本文是采用C++作为开发语言,又最大程度上用了C语言的有关的语法。

以visual c++6.0为开发工具。

旨在实现校园导航系统中,学校的简介,景点的介绍,路线查询等基本的问题。

为来往客人参观校园提供方便。

关键词:C++;C;visual c++6.0;校园导航目录目录 (1)第一章开发环境和开发工具 (1)1.1 C/ C ++语言简介 (1)1.2 开发背景 (1)1.3 开发环境 (1)第二章算法思想 (2)2.1 系统需求分析 (2)2.2 系统总体设计 (3)2.2.1 系统设计目标 (3)2.2.2 开发设计思想 (3)2.2.3 系统功能模块设计 (3)2.3 算法思想描述 (4)第三章算法实现 (6)3.1 数据结构 (6)3.2 程序模块 (6)3.3 各模块之间的调用关系上 (12)3.4 源程序代码 (12)第四章测试与分析 (22)4.1 测试数据选择 (22)4.2 测试结果分析 (26)总结 (27)心得体会 (28)参考文献 (29)第一章开发环境和开发工具1.1 C/ C ++语言简介C语言是一种计算机程序设计语言。

它既具有高级语言的特点,又具有汇编语言的特点。

它由美国贝尔研究所的D.M.Ritchie于1972年推出。

1978后,C语言已先后被移植到大、中、小及微型机上。

它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。

具体应用比如单片机以及嵌入式系统开发。

C++是一种静态数据类型检查的、支持多重编程范式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。

1.2 开发背景随着科学技术的不断发展,计算机科学日渐成熟,其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。

采用计算机进行校园导航已成为衡量校园数字化的重要标志。

校园导航效率的好坏对于来校参观的客人和学校管理者来说都至关重要,在很大程度上影响着校园的数字化建设和学校的影响力。

因此,本文所研究的校园导航系统具有一定的使用价值和现实意义。

1.3 开发环境本文所采用的开发环境主要是基于c++的visual stadio c++。

它是一个系统的集成开发环境。

很适合C\C++程序的开发。

我们日常的学习和生活中大多就用这个开发环境进行学习和编程。

第二章算法思想2.1 系统需求分析1、设计你的学校的校园平面图,所选的景点不少于10个。

以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

2、为来往客人提供图中任意景点相关信息的查询。

3、为来往的客人提供图中任意景点的问路查询,即查询任意两个景点间的一条最短的简单路径。

根据以上分析和抽象可得到本系统的抽象数据类型如下:ADT graph{数据对象 R:V是校园中景点的集合,称为顶点集。

R={VR}VR={<v,w,>|v,w∈V且P(v,w),(v,w)表示从景点v到景点w的路径长度基本操作 P:Creatgraph(&G,V,VR)初始条件:V是图的顶点集,VR是图中边的集合。

操作结果:按V和VR的定义构造图G。

Output(G)初始条件:图G已经存在。

操作结果:打印出图的信息ShortestPath(G,v)初始条件:图G已存在,v是图中的一个顶点。

操作结果:返回从v出发到图中任意顶点的最短的路径。

}ADT graph;2.2 系统总体设计2.2.1 系统设计目标本文研究开发的校园导航系统用于支持来往校园参观的客人提供最省时的导航服务,有如下三个方面的目标:1、为来往的客人提供校园的简介。

2、为来往的客人提供校园中各景点的简介,以及各景点的距离等情况。

3、为来往的客人提供到达目的地的最短的路线。

2.2.2 开发设计思想基于以上系统设计目标,本文在开发校园导航系统时遵循了以下开发设计思想:1、采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。

2、尽量达到操作过程中的直观、方便、实用、安全等要求。

3、系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。

2.2.3 系统功能模块设计本系统分为四个模块:菜单模块、景点介绍模块、路径查询模块、最短路径模块。

得到如图3-1所示的系统功能模块图。

图3-1系统功能模块图2.3 算法思想描述1、迪杰斯特拉算法思想:按路径长度递增次序产生最短路径算法:把V分成两组:(1)S:已求出最短路径的顶点的集合(2)V-S=T:尚未确定最短路径的顶点集合将T中顶点按最短路径递增的次序加入到S中,保证:(1)从源点V0到S中各顶点的最短路径长度都不大于从V0到T中任何顶点的最短路径长度(2)每个顶点对应一个距离值S中顶点:从V0到此顶点的最短路径长度T中顶点:从V0到此顶点的只包括S中顶点作中间顶点的最短路径长度依据:可以证明V0到T中顶点Vk的最短路径,或是从V0到Vk的直接路径的权值;或是从V0经S中顶点到Vk的路径权值之和2、邻接矩阵建立有无向权图的算法思想:用两个数组分别存储数据元素的信息和数据之间的关系的信息其形式描述如下:#define Max 32767//最大值∞#define NUM 11//最大顶点个数typedef struct ArcCell{int adj; // 相邻接的景点之间的路程char *info;}ArcCell; // 定义边的类型typedef struct VertexType{int number; // 景点编号char *sight; // 景点名称char *description; // 景点描述}VertexType; // 定义顶点的类型typedef struct{VertexType vex[NUM]; // 图中的顶点,即为景点ArcCell arcs[NUM][NUM]; // 图中的边,即为景点间的距离int vexnum,arcnum; // 顶点数,边数}MGraph; // 定义图的类型其中用二维数组表示途中个边之间的关系。

第三章算法实现3.1 数据结构1、顶点、边和图类型:typedef struct ArcCell{int adj; // 相邻接的景点之间的路程char *info;}ArcCell; // 定义边的类型typedef struct VertexType{int number; // 景点编号char *sight; // 景点名称char *description; // 景点描述}VertexType; // 定义顶点的类型typedef struct{VertexType vex[NUM]; // 图中的顶点,即为景点ArcCell arcs[NUM][NUM]; // 图中的边,即为景点间的距离int vexnum,arcnum; // 顶点数,边数}MGraph; // 定义图的类型3.2 程序模块1.main函数void main() // 主函数{ int v0,v1;char ck;system("color cb");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case'1':introduce();printf("\n\n\t\t\t%-25s\n\n",G.vex[0].description);getchar();getchar();break;case '2':system("cls");pingmu();printf("\n\n\t\t\t请选择起点景点(1~10):");scanf("%d",&v0);printf("\t\t\t请选择终点景点(1~10):");scanf("%d",&v1);ShortestPath(v0); // 计算两个景点之间的最短路径output(v0,v1); // 输出结果printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;case '3':search();break;case'5':PrintMGraph();printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;};}while(ck!='e');}2.主菜单char Menu() // 主菜单//{char c;int flag;do{flag=1;system("cls");pingmu();printf("\n\t\t┏━━━━━━━━━━━━━━━━━━━┑\n");printf("\t\t┃┃\n");printf("\t\t┃1.学校简介┃\n");printf("\t\t┃2.查询景点路径┃\n");printf("\t\t┃3.查询景点信息┃\n");printf("\t\t┃5.查询各景点之间的距离┃\n");printf("\t\t┃e.退出┃\n");printf("\t\t┃┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='5'||c=='e')flag=0;}while(flag);return c;}3.查询子菜单char SearchMenu() // 查询子菜单{char c;int flag;do{flag=1;system("cls");pingmu();printf("\n\t\t┏━━━━━━━━━━━━━━━━━━┑\n");printf("\t\t┃┃\n");printf("\t\t┃1、按照景点编号查询┃\n");printf("\t\t┃2、按照景点名称查询┃\n");printf("\t\t┃e、返回┃\n");printf("\t\t┃┃\n");printf("\t\t┗━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}4.查询景点信息void search() // 查询景点信息{int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");//introduce();pingmu();printf("\n\n\t\t请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\n\t\t\t您要查找景点信息如下:");printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);printf("\n\t\t\t按任回车返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按回车键返回...");getchar();getchar();}break;case '2':system("cls");pingmu();introduce();printf("\n\n\t\t请输入您要查找的景点名称:");scanf("%s",name);for(i=1;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\n\t\t\t您要查找景点信息如下:");printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);printf("\n\t\t\t按回车键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按回车键返回...");getchar();getchar();}break;}}while(c!='e');}5.创建图的函数void CreateUDN(int v,int a) // 创建图的函数6. 打印出邻接矩阵void PrintMGraph(){int i,j;cout<<"\n================================================================ ====\n\n ";for(i=1;i<G.vexnum;++i){cout<<G.vex[i].sight<<" ";}cout<<endl;for(i=1;i<G.vexnum;++i){cout<<"\n\n"<<G.vex[i].sight<<" ";for(j=1;j<G.vexnum;++j){if(G.arcs[i][j].adj==Max)cout<<" no ";elsecout<<" "<<G.arcs[i][j].adj;}}cout<<"\n\n\n\n================================================== ========================================\n\n\n";7.迪杰斯特拉算法void ShortestPath(int num) // 迪杰斯特拉算法最短路径函数num为入口点的编号{int v,w,i,t; // i、w和v为计数变量int final[NUM];int min;for(v=1;v<NUM;v++){final[v]=0; // 假设从顶点num到顶点v没有最短路径D[v]=G.arcs[num][v].adj;// 将与之相关的权值放入D中存放for(w=1;w<NUM;w++) // 设置为空路径P[v][w]=0;if(D[v]<32767) // 存在路径{P[v][num]=1; // 存在标志置为一P[v][v]=1; // 自身到自身}}D[num]=0;final[num]=1; // 初始化num顶点属于S集合// 开始主循环,每一次求得num到某个顶点的最短路径,并将其加入到S集合for(i=1;i<NUM;++i) // 其余G.vexnum-1个顶点{min=Max; // 当前所知离顶点num的最近距离for(w=1;w<NUM;++w)if(!final[w]) // w顶点在v-s中if(D[w]<min) // w顶点离num顶点更近{v=w;min=D[w];}final[v]=1; // 离num顶点更近的v加入到s集合for(w=1;w<NUM;++w) // 更新当前最短路径极其距离if(!final[w]&&((min+G.arcs[v][w].adj)<D[w]))// 不在s集合,并且比以前所找到的路径都短就更新当前路径//{D[w]=min+G.arcs[v][w].adj;for(t=0;t<NUM;t++)P[w][t]=P[v][t];P[w][w]=1;}}}8、输出:屏幕输出函数:void pingmu();最短路线输出函数void output;3.3 各模块之间的调用关系上模块调用关系如图3—2所示:图3—2模块调用关系图3.4 源程序代码#include<iostream.h>#include "string.h"#include "stdio.h"#include "stdlib.h"#define Max 32767#define NUM 11typedef struct ArcCell{int adj; // 相邻接的景点之间的路程char *info;}ArcCell; // 定义边的类型typedef struct VertexType{int number; // 景点编号char *sight; // 景点名称char *description; // 景点描述}VertexType; // 定义顶点的类型typedef struct{VertexType vex[NUM]; // 图中的顶点,即为景点ArcCell arcs[NUM][NUM]; // 图中的边,即为景点间的距离int vexnum,arcnum; // 顶点数,边数}MGraph; // 定义图的类型MGraph G; // 把图定义为全局变量int P[NUM][NUM]; // //long int D[NUM]; // 辅助变量存储最短路径长度int x[13]={0};void CreateUDN(int v,int a); // 创建图的函数void pingmu(); //屏幕输出函数void introduce();void ShortestPath(int num); //最短路径函数void output(int sight1,int sight2); //输出函数void PrintMGraph();char Menu(); // 主菜单void search();;// 查询景点信息char SearchMenu(); // 查询子菜单void NextValue(int);void display(); // 显示遍历结果void main() // 主函数{int v0,v1;char ck;system("color 4b");CreateUDN(NUM,11);do{ck=Menu();switch(ck){case'1':introduce();printf("\n\n\t\t\t%-25s\n\n",G.vex[0].description);getchar();getchar();break;case '2':system("cls");pingmu();printf("\n\n\t\t\t请选择起点景点(1~10):");scanf("%d",&v0);printf("\t\t\t请选择终点景点(1~10):");scanf("%d",&v1);ShortestPath(v0); // 计算两个景点之间的最短路径output(v0,v1); // 输出结果printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;case '3':search();break;case'5':PrintMGraph();printf("\n\n\t\t\t\t请按回车键继续...\n");getchar();getchar();break;};}while(ck!='e');}char Menu() // 主菜单 //{char c;int flag;do{flag=1;system("cls");pingmu();introduce();printf("\n\t\t┏━━━━━━━━━━━━━━━━━━━┑\n");printf("\t\t ┃┃\n");printf("\t\t ┃ 1.学校简介┃\n");printf("\t\t ┃ 2.查询景点路径┃\n");printf("\t\t ┃ 3.查询景点信息┃\n");printf("\t\t ┃ 5.查询各景点之间的距离┃\n");printf("\t\t ┃ e.退出┃\n");printf("\t\t ┃┃\n");printf("\t\t ┗━━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='3'||c=='5'||c=='e')flag=0;}while(flag);return c;}char SearchMenu() // 查询子菜单{char c;int flag;do{flag=1;system("cls");pingmu();introduce();printf("\n\t\t ┏━━━━━━━━━━━━━━━━━━┑\n");printf("\t\t ┃┃\n");printf("\t\t ┃ 1、按照景点编号查询┃\n");printf("\t\t ┃ 2、按照景点名称查询┃\n");printf("\t\t ┃ e、返回┃\n");printf("\t\t ┃┃\n");printf("\t\t ┗━━━━━━━━━━━━━━━━━━┛\n");printf("\t\t\t请输入您的选择:");scanf("%c",&c);if(c=='1'||c=='2'||c=='e')flag=0;}while(flag);return c;}void search() // 查询景点信息{int num;int i;char c;char name[20];do{system("cls");c=SearchMenu();switch (c){case '1':system("cls");introduce();pingmu();printf("\n\n\t\t请输入您要查找的景点编号:");scanf("%d",&num);for(i=0;i<NUM;i++){if(num==G.vex[i].number){printf("\n\n\t\t\t您要查找景点信息如下:");printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);printf("\n\t\t\t按任回车返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按回车键返回...");getchar();getchar();}break;case '2':system("cls");pingmu();introduce();printf("\n\n\t\t请输入您要查找的景点名称:");scanf("%s",name);for(i=1;i<NUM;i++){if(!strcmp(name,G.vex[i].sight)){printf("\n\n\t\t\t您要查找景点信息如下:");printf("\n\n\t\t\t%-25s\n\n",G.vex[i].description);printf("\n\t\t\t按回车键返回...");getchar();getchar();break;}}if(i==NUM){printf("\n\n\t\t\t没有找到!");printf("\n\n\t\t\t按回车键返回...");getchar();getchar();}break;}}while(c!='e');}void CreateUDN(int v,int a) // 创建图的函数{int i,j;G.vexnum=v; // 初始化结构中的景点数和边数G.arcnum=a;for(i=1;i<G.vexnum;++i) G.vex[i].number=i; // 初始化每一个景点的编号// 初始化没一个景点名及其景点描述G.vex[0].sight="学校简介";G.vex[1].sight="校大门";G.vex[2].sight="教学楼";G.vex[3].sight="中心广场";G.vex[4].sight="山顶操场";G.vex[5].sight="学生宿舍";G.vex[6].sight="图书馆";G.vex[7].sight="体育馆";G.vex[8].sight="二食堂";G.vex[9].sight="服务楼";G.vex[10].sight="北门";// 这里把所有的边假定为32767,含义是这两个景点之间是不可到达for(i=1;i<G.vexnum;++i){for(j=1;j<G.vexnum;++j){G.arcs[i][j].adj=Max;G.arcs[i][j].info=NULL;}}//下边是可直接到达的景点间的距离,由于两个景点间距离是互相的,// 所以要对图中对称的边同时赋值。

相关文档
最新文档