校园导游程序
- 格式:doc
- 大小:249.00 KB
- 文档页数:16
1、需求分析设计一个校园导游系统程序,为来访的客人提供各种服务的信息查询。
(1)。
设计工商学院校园无向图,所含的景点不少于10个.以图中顶点表示校内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。
(2)。
为来访客人提供图中任意景点相关信息的查询。
(3)。
为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。
2、设计思路校园旅游模型是由景点和景点之间的路径组成的,所以这完全可以用数据结构中的图来模拟.用图的结点代表景点,用图的边代表景点之间的路径.所以首先应设计一个图类.结点值代表景点信息,边的权值代表景点间的距离。
结点值及边的权值用顺序表存储,所以需要设计一个顺序表类。
本系统需要查询景点信息和求一个景点到另一个景点的最短路径长度及路线,为方便操作,所以给每个景点一个代码,用结构体类型实现。
计算路径长度和最短路线时可用弗洛伊德(Floyd)算法实现。
最后用switch选择语句选择执行浏览景点信息或查询最短路径。
3 算法设计3。
1 概要设计3。
1。
1 程序中包含的模块(1)主程序模块主函数:void main(void)void cmd(void) cmd修改显示框大小,字体背景颜色,初始化景点,景点信息打印菜单,MGraph InitGraph(void); //初始化图。
MGraph * CreatUDN(MGraph *G);//初始化图形接受用户输入void Menu(void);//菜单函数void Browser(MGraph *G);//浏览函数void ShortestPath_DIJ(MGraph *G);void Floyd(MGraph *G);//查询图中任意两个景点间的所有路径void Search(MGraph *G);//查找函数int LocateVex(MGraph *G,char*v); // 迪杰斯特拉算法计算起点各顶点间短路径,void print(MGraph *G);//输出函数(2)查询模块景点信息查询:void introduce()最短路径查询:要查找的两景点的最短距离:用floyd算法求两个景点的最短路径:(3)打印模块:void print(MGraph *G);3。
学生开学校园导游安排开学之际,学生们需要熟悉新学期的校园环境,而一场精心安排的学校园导游将成为他们的重要经历之一。
本文将从策划、导游内容、参与者、时间安排、安全措施、导游路线、景点介绍、活动设计、教育意义、反馈和总结等方面展开回答,以便帮助学校更好地组织这样一次导游活动。
一、策划开展一场成功的学校园导游需要提前进行充分策划。
学校可以组织策划小组,由老师、学生代表和专业人士参与。
策划小组可考虑导游活动的目的、内容和形式,并确定导游活动的主题和重点。
二、导游内容学校园导游应结合校园实际情况,设计内容丰富多样,既可以包括校史、校园建筑、教学楼和实验室,又可以有体育场、食堂、图书馆和艺术中心等。
导游内容应涵盖学校的各个方面,以让学生获取全面的信息。
三、参与者学生导游应由学生主导,学生代表可以扮演导游的角色,向其他同学进行解说和介绍。
学校还可以安排老师作为监督和协助的角色,以确保活动的顺利进行。
四、时间安排学校园导游的时间安排应避开上课时间,最好放在开学的第一周或者周末。
活动时间不宜过长,一般为2-3个小时。
这样既不会耽误正常教学活动,又能充分展示学校各个方面的信息。
五、安全措施学校园导游期间,学校应加强对学生的安全保护。
组织方应与保卫部门紧密配合,确保学生的人身安全。
导游路线应避免危险区域,并设置必要的提示标志。
此外,参与学生应配备导游证件,以便有效管理和辨识。
六、导游路线根据学校的实际情况,制定合理的导游路线。
导游路线可根据校园地理位置、建筑特点、教学资源等进行规划。
最好能够囊括学校的重要景点和代表性建筑,以便让学生们全面了解学校。
七、景点介绍每个景点的介绍应简洁明了,涵盖基本信息和背后的故事。
例如,可以介绍图书馆的藏书量、合作图书馆的情况;艺术中心的各项设施和文化活动等。
导游团队可以充分准备,确保景点介绍的丰富性和可靠性。
八、活动设计为了增加学生们的参与感和兴趣,学校园导游可以设计一些趣味性的活动。
一、教学目标1. 让学生了解校园的历史、文化、建筑特点等,培养学生的爱国主义情感。
2. 培养学生的组织能力、表达能力、团队协作能力和观察能力。
3. 提高学生对校园文化的认同感,激发学生热爱校园、关心校园的主人翁意识。
二、教学重点1. 校园历史、文化及建筑特点的了解。
2. 导游技巧的掌握。
3. 团队协作能力的培养。
三、教学难点1. 导游讲解内容的组织与表达。
2. 团队协作中沟通与协调能力的提升。
四、教学准备1. 教师准备:校园导游资料、导游服装、导游旗、讲解稿等。
2. 学生准备:分组讨论、查阅资料、制作导游图等。
五、教学过程(一)导入1. 教师简要介绍校园的历史、文化及建筑特点。
2. 学生分组讨论,提出自己对校园的印象和期待。
(二)分组参观1. 学生分组,每组选择一位组长,负责协调本组参观活动。
2. 教师带领学生参观校园,每组负责讲解本组参观区域。
3. 学生在参观过程中,注意观察、记录,为讲解做准备。
(三)讲解与交流1. 学生分组进行讲解,其他组员认真聆听,并提出问题。
2. 教师对学生的讲解进行点评,指导学生如何更好地进行导游讲解。
(四)团队协作与互动1. 学生分组进行团队协作游戏,如接力跑、拔河等,培养团队精神。
2. 学生在互动环节中,分享自己的心得体会,提高沟通与协作能力。
(五)总结与反思1. 学生总结本次导游活动的收获与不足。
2. 教师对学生的表现进行点评,提出改进意见。
六、教学评价1. 学生对校园历史、文化及建筑特点的了解程度。
2. 学生导游讲解的组织与表达能力。
3. 学生团队协作与沟通能力的提升。
七、教学延伸1. 学生撰写校园导游词,提高写作能力。
2. 学生制作校园导游图,提高绘画能力。
3. 学生参与校园文化建设活动,为校园增光添彩。
八、教学反思1. 教师在教学中要注意引导学生主动参与、积极思考,提高学生的学习兴趣。
2. 教师要注重培养学生的团队协作能力和沟通能力,为学生的未来发展奠定基础。
校园导游程序c课程设计一、课程目标知识目标:1. 学生能理解并掌握C语言中数组、函数、指针等基本概念及其应用;2. 学生能运用结构体、文件操作等知识模块,实现校园导游程序的基本功能;3. 学生了解并掌握程序设计中模块化、结构化的基本方法。
技能目标:1. 学生能运用C语言编写具有实用价值的程序,具备一定的编程能力;2. 学生通过校园导游程序的设计,培养解决实际问题的能力;3. 学生能够进行程序调试与优化,提高程序性能。
情感态度价值观目标:1. 学生在课程学习中,培养对编程的兴趣和热情,树立自信心;2. 学生通过团队合作,培养沟通、协作能力,增强团队意识;3. 学生能够关注校园文化,将课程与实际生活相结合,提高社会责任感。
课程性质分析:本课程为C语言编程实践课,旨在让学生通过实际项目的开发,巩固所学知识,提高编程能力。
学生特点分析:学生已具备C语言基础,具有一定的编程能力,但实际应用经验不足。
教学要求:结合学生特点,课程注重实践操作,引导学生运用所学知识解决实际问题,提高学生的编程素养。
将目标分解为具体的学习成果,以便后续的教学设计和评估。
1. C语言基础知识回顾:数组、函数、指针、结构体、文件操作等;2. 程序设计方法:模块化、结构化编程;3. 校园导游程序功能需求分析:地图展示、路径规划、景点介绍等;4. 校园导游程序设计与实现:- 数据结构设计:景点结构体定义、路径数组等;- 功能模块实现:地图展示、路径规划算法、景点信息查询等;- 界面设计:命令行界面设计、功能菜单编写等;5. 程序调试与优化:调试技巧、性能优化方法;6. 团队合作与项目展示:分组合作、项目汇报与评价。
教学大纲安排:1. 第一周:C语言基础知识回顾,理解并掌握基本概念;2. 第二周:程序设计方法学习,分析校园导游程序需求;3. 第三周:校园导游程序数据结构设计,功能模块划分;4. 第四周:实现各功能模块,编写界面代码;5. 第五周:进行程序调试与优化,确保程序稳定运行;6. 第六周:团队合作,完成项目展示与评价。
实验六简单校园导游程序的设计与实现本实验的目的是通过对“校园导游”程序段设计与实现来熟练掌握图形结构在实际问题中的应用。
一、问题描述当人们到一个陌生的地方去旅游时,可能会找一个导游为自己在游玩的过程中提供帮助。
导游可以提供很多服务,如介绍参观景点的历史背景等相关信息,推荐到下一个景点的最佳路径,接到旅游者所提出的关于旅游景点的相关问询等。
对于刚刚来到校园的新生,对校园环境不熟悉的情况也是如此,一般都是高年级的学生充当“校园导游”的角色。
如果能够提供一个程序让新生或来访的客人自主地通过与机器“对话”来获得相关的信息的话,将会节省大量的人力和时间,并且所提供的信息应做到尽可能的准确、详尽。
一个成功的校园导游程序可以替代现实生活中这些“校园导游”,更方便大家查询相关的信息。
本次试验需要开发一个简单的校园导游程序,程序的主体功能如下:①显示校园的平面图,为方便用户直观地看到校园的全景示意图,并确定自己的位置。
②为用户提供对平面图中的任意场所相关信息的查询。
③为用户提供对平面图中任意场所的问路查询。
二、数据结构设计由于各个场所通过校园中的道路相连,各个场所和连接它们的道路构成了整个校园的地理环境,所以使用图这种数据结构对它们进行描述。
以图中的顶点代表校园内各个场所,应包含场所名称、代号、简介等信息;以边表示连接各个场所的道路,应包含道路的代号、路径的长度等信息。
顶点和边均使用结构体定义,整个图的数据结构可以采用教材中介绍的各种表示方法,如带权的邻接矩阵。
三、功能(函数)设计1、显示校园平面图的功能模块此模块调用其他工具绘制好的BMP等程序可以识别的图片来显示校园平面图。
平面图中应醒目地标识出场所的准确名称以备用户查询。
2、查询任意场所的相关信息的功能模块此模块接收用户所输入的场所名称,并将场所的简介信息反馈给用户。
3、求单源点到其他各点的最短路径的功能模块此模块计算并记录从校园门口到各个场所的最短路径。
4、任意场所的问路查询的功能模块此模块接收用户所输入的场所名称,并在3中计算出的最短路径集合中找到相关项的信息反馈给用户。
一、教学目标1. 知识与技能:了解校园的历史、建筑特色、文化内涵,掌握导游讲解的基本技巧。
2. 过程与方法:通过实地考察、小组讨论、模拟导游等方式,提高学生的观察能力、表达能力、团队协作能力。
3. 情感态度与价值观:培养学生热爱校园、尊重历史、传承文化的情感,增强学生的责任感和使命感。
二、教学对象小学四年级及以上学生三、教学时间2课时四、教学地点学校校园五、教学准备1. 教师准备:校园导游词、PPT、地图、讲解设备等。
2. 学生准备:了解校园的历史、建筑特色、文化内涵,准备好导游词和问题。
六、教学过程第一课时一、导入1. 教师简要介绍校园导游的意义和作用。
2. 学生分组,每组选一名组长,负责组织组员进行导游讲解。
二、实地考察1. 学生分组,每组选择一个参观路线,如:校园历史建筑、文化广场、艺术长廊等。
2. 学生在组长带领下,对选定区域进行实地考察,了解相关历史、建筑特色、文化内涵。
三、模拟导游1. 学生回到教室,根据实地考察情况,准备导游词。
2. 教师组织学生进行模拟导游,每组派一名代表进行讲解。
四、评价与反馈1. 教师对学生的导游讲解进行评价,提出改进意见。
2. 学生之间互相评价,交流心得。
第二课时一、复习导入1. 教师简要回顾上一节课的学习内容。
2. 学生分组,每组选择一个参观路线,如:校园历史建筑、文化广场、艺术长廊等。
二、深化讲解1. 学生根据实地考察情况,对导游词进行深化讲解。
2. 教师组织学生进行深化讲解,每组派一名代表进行讲解。
三、互动环节1. 教师提出问题,学生抢答。
2. 学生分组进行知识竞赛,巩固所学知识。
四、总结与反思1. 教师对学生的讲解进行总结,点评学生的表现。
2. 学生进行反思,分享学习心得。
五、课后作业1. 学生撰写一篇校园导游词。
2. 学生向家人或朋友介绍自己的校园,提高口语表达能力。
七、教学评价1. 教师观察学生在实地考察、模拟导游、互动环节的表现,评价学生的参与度和表达能力。
校园导游行程安排一、导语校园导游是一项重要的活动,可以帮助新生快速熟悉校园环境并了解学校的历史文化。
本文将就如何安排校园导游行程进行探讨。
二、确定导游路线在确定导游路线时,需要考虑学校的重要建筑、景点和历史文化遗址。
可以根据学校的特色和历史背景进行选择,尽量使导游路线丰富多样。
三、校门及主入口导游行程的第一站可以选择校门及主入口。
介绍校门的历史和象征意义,让新生体会到学校的庄重和壮丽。
四、校园风景名胜学校的风景名胜是校园导游中不可缺少的一部分。
可以将学校的花坛、湖泊、假山等景点纳入导游行程中,并介绍它们的背后故事和意义。
五、教学楼及实验室学校的教学楼和实验室是学习的重要场所,也是新生们度过大部分时间的地方。
在导游行程中,可以介绍各个教学楼的用途和特色,以及学生常去的实验室,帮助新生们更好地适应学习环境。
六、图书馆及自习室图书馆是学生学习和阅读的重要场所,自习室是学生自我管理和自我学习的地方。
在导游行程中,可以介绍图书馆的历史和藏书情况,同时也要向新生介绍自习室的使用规则和重要性。
七、文化活动中心文化活动中心是学校举办各类文艺演出和活动的场所。
在导游行程中,可以介绍文化活动中心的功能和意义,向新生们展示学校文化生活的丰富多彩。
八、体育场馆体育场馆是学生进行体育锻炼和比赛的地方。
在导游行程中,可以介绍各个体育场馆的设施和使用情况,鼓励新生们积极参与体育运动,增强身体素质。
九、学生宿舍区学生宿舍区是新生们的“家”,也是他们在大学期间生活的重要场所。
在导游行程中,可以让新生们参观学生宿舍,了解宿舍的规章制度和居住环境,帮助他们更好地适应新的生活方式。
十、学生服务中心学生服务中心是提供各类支持服务的地方,包括学生事务咨询、就业指导、心理咨询等。
在导游行程中,可以向新生们介绍学生服务中心的各项服务和使用方法,帮助他们更好地解决学习和生活中的问题。
十一、总结通过校园导游,新生们可以快速了解学校的各项设施和服务,熟悉校园环境,同时也能感受到学校的历史文化和学风氛围。
学校小导游活动策划方案一、活动背景和目的随着社会的发展,以学习为中心的传统教育模式已不能满足学生的全面发展需求。
学校导游活动是一种新型的教育活动,旨在通过实地参观和触摸实物,增强学生的实践能力和动手能力,培养学生的团队合作和沟通能力,提高学生的综合素质和创造力。
本次活动以让学生亲身体验学校建筑、设施和优美的环境为主要目的,让学生更好地了解和熟悉学校,增加对学校的归属感和认同感。
二、活动时间和地点活动时间:2022年10月1日(国庆节)活动地点:学校校园三、活动内容和流程1. 活动准备阶段:- 确定活动日期和地点;- 组织活动策划团队,并确定各成员的职责和任务;- 制定活动预算,并进行经费申请;- 筹备必要的宣传材料,包括海报、传单等;- 邀请有关专家和老师担任导游和讲解员。
2. 活动宣传阶段:- 制作活动海报和传单,宣传活动的目的、时间、地点等信息,并张贴在学校各明显地方;- 利用学校官方微信公众号发布活动通知,激发学生的参与热情;- 利用校园广播和课堂宣传,加强对活动的宣传,提醒学生和家长的注意事项等。
3. 活动实施阶段:- 在活动当天,安排学生们在指定地点集结,进行简短的活动开场仪式,介绍活动的具体内容和流程;- 将学生分为若干个小组,每个小组由一名导游和一名讲解员带领,按照活动路线依次参观学校的主要建筑和设施;- 在每个参观点,导游和讲解员向学生们介绍该地点的历史、功能和背后的故事,并回答学生们的问题;- 活动期间,适当安排一些小游戏或互动环节,增加活动的趣味性和参与性;- 活动结束后,组织学生们进行总结发言,分享自己在活动中的感想和体会,并选出优秀小导游和讲解员。
四、活动保障和安全措施1. 活动保障:- 确保活动所需的物资和设备的准备充足,包括导游用具、讲解材料、饮用水等;- 活动期间,安排学校保卫人员和志愿者参与活动,确保学生的安全和秩序。
2. 安全措施:- 活动前,对活动路线和参观点进行安全评估,并采取相应的安全措施,确保学生的参观安全;- 活动期间,加强对学生的安全教育,告知学生在活动中的安全注意事项,并增派工作人员进行监督和管理。
校园导游讲解策划书3篇篇一校园导游讲解策划书一、活动主题“校园风采,导游之星”二、活动目的本活动旨在为学生提供一个深入了解校园的机会,同时也为他们提供一个锻炼表达能力和领导能力的平台。
通过导游讲解,学生可以更好地熟悉校园环境,传承校园文化,提升自身综合素质。
三、活动对象及时间1. 活动对象:全体学生2. 活动时间:[具体时间]四、活动地点校园内各景点五、活动流程1. 报名阶段([报名时间])学生可通过线下或线上方式报名参加活动。
报名时需提交个人信息、讲解景点及讲解词。
2. 培训阶段([培训时间])对报名学生进行集中培训,包括导游技巧、讲解礼仪、校园文化等方面的内容。
培训结束后,学生需进行试讲,通过试讲的学生方可参加决赛。
3. 决赛阶段([决赛时间])决赛分为现场讲解和问答两个环节。
现场讲解环节,学生需在规定时间内对校园内某一景点进行讲解。
问答环节,评委根据学生讲解内容进行提问,学生进行现场作答。
4. 颁奖仪式(决赛结束后)颁发奖项,对获奖学生进行表彰和奖励。
优秀讲解员将被聘为校园导游志愿者,参与校园文化活动的讲解工作。
六、活动宣传1. 在校园内张贴宣传海报、发放传单,宣传活动的时间、地点和内容。
2. 利用学校官网、公众号、微博等平台进行宣传,扩大活动影响力。
3. 邀请学校广播台、电视台等媒体对活动进行报道。
七、活动预算1. 培训费用:[X]元2. 决赛奖品费用:[X]元3. 宣传费用:[X]元4. 其他费用:[X]元八、注意事项1. 活动期间,要确保学生的安全,做好安全防范措施。
2. 评委要秉持公平、公正、公开的原则进行评选,确保活动的公正性。
篇二校园导游讲解策划书一、活动主题“校园风采,导游之星”二、活动目的1. 为了让游客更好地了解校园文化和历史,提升校园的知名度和美誉度。
2. 为学生提供一个锻炼自己的机会,提高他们的讲解能力和沟通能力。
3. 促进校园文化的传承和发展,增强学生对校园的认同感和归属感。
一、教案名称:校园导游教学活动二、教学目标:1. 培养学生对校园环境的认识,提高学生的观察能力和表达能力。
2. 锻炼学生的组织协调能力和团队协作精神。
3. 增强学生的文化自信,激发学生对校园文化的热爱。
三、教学对象:初中生四、教学时间:1课时五、教学地点:校园内六、教学准备:1. 教案2. 校园地图3. 摄影设备4. 学生分组名单七、教学过程:(一)导入新课(5分钟)1. 导入语:同学们,我们生活在这个美丽的校园里,对校园的每一个角落都充满了感情。
今天,我们就来担任校园的小导游,向大家介绍我们的校园。
2. 分组:将学生分成若干小组,每组选出一个组长,负责本组的导游任务。
(二)校园导游讲解(20分钟)1. 每组选择一个景点作为讲解重点,如图书馆、教学楼、操场等。
2. 每组准备讲解稿,包括景点的历史背景、建筑特点、文化内涵等。
3. 各组进行讲解,其他组学生担任听众,认真聆听并记录。
(三)互动交流(10分钟)1. 各组讲解结束后,邀请其他组学生提问,进行互动交流。
2. 学生分享自己的感受,交流对校园文化的理解。
(四)总结评价(5分钟)1. 教师对学生的讲解进行点评,肯定优点,指出不足。
2. 学生进行自我评价,反思自己的讲解过程。
八、教学反思:1. 通过本次教学活动,学生能够更好地了解校园环境,提高自己的表达能力。
2. 学生在分组合作中,培养了团队协作精神,提高了组织协调能力。
3. 学生对校园文化的认识更加深入,增强了文化自信。
九、校园导游讲解范文(以图书馆为例):尊敬的各位游客,大家好!我是今天的小导游,非常荣幸能带领大家参观我们学校的图书馆。
我们的图书馆位于教学楼一楼,占地面积约200平方米,藏书量丰富,分为图书区和电子阅览区两部分。
首先,让我们来到图书区。
这里分为文学、历史、科学、艺术等不同类别,共计藏书2万册。
这些书籍都是经过精心挑选的,旨在满足同学们的学习需求。
接下来,我们来到电子阅览区。
这里配备了多台电脑,供同学们查阅电子书籍和资料。
校园导游程序报告一、问题分析和任务定义1、题目与要求校园导游程序题目:用无向网表示你所在学校的校园景点平面图,图中定点表示主要景点,存放景点的编号、名称、简介等信息。
要求能够回答有关景点介绍、游览路经等问题。
要求:(1)查询各景点相关信息;(2)查询图中任意两个景点的最短路径。
(3)查询图中任意两个景点的所有路径。
.选作内容:求多个景点的最佳游览路经。
根据设计的基本要求,可知本系统应实现以下几个功能:(1)景点查询:景点查询,输出所查询景点的相关信息(2)景点之间最佳路径查询功能:输出所选择的两点之间的最短路径及路径长度。
(3)两景点间所有路径:输出两点间存在的所有路径。
2、问题分析确定以无向图为数据结构的校园地图如图1:图1校园地图图的信息以邻接矩阵形式存储,邻接矩阵以二维数组的数据结构存储。
cost[i][j];当i=j时及i点与j点无直接连通时,其值为无穷大,定义一个很大的整数Maxint代替无穷大。
当i与j点邻接时,其值为两点间的权值即两景点距离。
(1)、查询景点信息将相应景点信息存入文本文档中,依据需要调用读取文件,并显示在屏幕上。
(2)、两点间最短路径利用迪杰斯特拉(Dirjstra)算法求两点之间最短路径。
(3)、两点间所有路径利用邻接矩阵转换为邻接表,以邻接表的遍历查找路径,并将路径暂时存储,最后一次将各路径输出。
3、任务定义设计creat ();函数存入图的矩阵信息。
设计infor ();函数查询景点信息。
设计DJ_shortestpath ();函数利用迪杰斯特拉算法求最短路径。
设计Allpath ();函数求两点间所有路径。
4、程序实现功能查询某景点信息。
查找两景点间最短路径。
查找两景点间所有路径。
二、数据结构的选择和概要设计1、数据结构的定义图的定义:图的信息以邻接矩阵存储,利用二维数组作为矩阵坐标,二维数组的值表示图的两点间的距离,即无向图的权值,若两点间无直接路径,则以无穷大为权值。
景点相关信息:景点相关信息以文本文档存储,利用函数直接读取文本输出。
景点名称输出以结构体存储各个景点编号及相对的名称,以便于输出显示。
struct PlaceName {char name[10];}Place[11];2、概要设计主函数:调用各子函数完成选择功能。
主函数中以switch语句选择操作。
查询景点信息——1查找路径——2查找所有路径——3退出程序——4程序框架图如图2图2程序框架图三、详细设计和编码迪杰斯特拉算法核心思想:把图的顶点集合V分成两个子集,第一个子集包含已确定了最短路径的顶点,令其为S,第二个子集(V-S)包含尚未确定最短路径的顶点。
按最短路径长度递增的顺序逐个把V-S 中的顶点加到S中去,直至从v出发可以到达的所有顶点都包含在S中。
在这个过程中,总保持从v到S中各顶点的最短路径的长度都不大于从v到V-S中的任何顶点的最短路径的长度。
另外,每个顶点对应一个距离值,S中的定点的距离值就是从v到此顶点的最短路径的长度,V-S中的顶点的距离值是从v到此顶点的只包括S中的顶点的最短路径长度。
当然,每当把一个顶点从V-S移到S中去后,必须对V-S中剩余的顶点的距离值进行调整。
算法步骤如下:①初始时,S只包括顶点v,即S={ v },V-S包括其他所有顶点,v的距离值为0,V-S中的顶点的距离值是这样确定的:对V-S中的任意顶点w,若图中有边<v,w>,则w的距离为此边上的权值,否则w的距离值为∞(或用一个很大的数表示,程序中用Maxint=9999表示)。
②然后从V-S中选择一个距离值最小的顶点k加入到S中去,此时k的距离值恰好就是从v到它的最短路径的长度。
③S中加入一个顶点k后,对V-S中的各个顶点的距离值进行一次修正。
对V-S中的任意顶点w,若k的距离值加上边<k,w>上的权值小于w的原距离值,则将w的距离值调整为k的距离值与边<k,w>上的权值之和,否则w的距离值保持不变。
④重复步骤②和③,知道所有顶点都已包括在S中为止,即知道S=V为止。
在函数 DJ_shortestpath ();中实现了迪杰斯特拉算法。
图的大家邻接矩阵存储在二维数组cost[][]中,数组dist[]存放各顶点的当前距离值。
程序中用Maxint=9999表示∞。
数组path[]存放各定点在最短路径中的直接前驱。
算法执行完毕后,dist[]中的值即为最短路径的长度,最短路径可以从path[]求得。
数组dianji[]记录了顶点是否在S中,dianji[i]=1表示顶点i在S中,dianji[i]=0表示顶点i不在S中。
输出最短路径:由path[]中的各定点的直接前驱倒序遍历最短路径并存入临时数组temp[]中,然后倒序输出temp[]并以temp[]的值为下标调用景点名称数组Place[]以直接显示景点名称(将景点编号转换为字符名称输出)。
dist[]中的值为两景点最短路径的路径长度。
景点信息查询:将景点信息预先写入文本文档A1.txt –A10.txt中,输入要查询的景点标号x。
switch (x)case 1:读取A1.txt中信息;case 2:读取A2.txt中信息;case 3:读取A3.txt中信息;case 4:读取A4.txt中信息;case 5:读取A5.txt中信息;case 6:读取A6.txt中信息;case 7:读取A7.txt中信息;case 8:读取A8.txt中信息;case 9:读取A9.txt中信息;case 10:读取A10.txt中信息;各文件内容如下图图3各文件内容两点间所有路径:定义临时存储用栈。
邻接矩阵转换为邻接表。
对邻接矩阵进行遍历,将遍历路径存入栈中。
输出栈中元素。
回溯再遍历。
直到完全遍历整个邻接表。
四、上机调试首先遇到的难题是图的定义,对于本程序,常规的图的创建已经不利于算法的优化,经过考虑,最后决定定义全局变量二维数组,直接存储图的邻接矩阵。
其次,从未接触过的迪杰斯特拉算法让我开始时手足无措,去图书馆借了资料从头学习了迪杰斯特拉算法的核心思想,并对书本的案例程序进行了分块结构化,最后确定的迪杰斯特拉算法的具体实现方法。
对于景点查询一块,本来想法是将景点相关信息存入图的顶点信息结构体中,后来发现这样会将图信息的初始化复杂化,后来决定将相关信息写入文本文档,利用函数调用读取文件信息完成景点查询。
最难的就是所有路径问题,在经过一本一本书的搜索淘汰,一个网页一个网页的搜索淘汰,最后在同学的帮助下完成了算法,但是觉得这个算法太复杂,应该有更好的,却觉得已经力不从心了。
经常出现的错误:初始化函数creat ();未调用,使得邻接矩阵无数据,最后无运算结果输出。
对文件的读取格式不规范,显示的只是文件的片段或乱码。
输出路径的临时存储数组的输出接点起始错误,逆序的初始状态为非空结点的最大下标开始至0结束,下标变量i不能再次被赋值,否则会出错。
程序中存在的问题:程序部分算法扔有待改进优化。
在路径的输出结果中会出现错误输出。
若两点间有两条长度相同的路径,且为最短路径,程序只能输出其中之一。
经验体会相对于其他同学的课程设计题目,这个题目的难度高了很多,同样含金量也很高,思索,写代码,画算法,改错,删除、删除、再删除,难题接踵而至,未遇到的算法,未曾想过的问题都出现了。
两个星期做一个程序还未能尽善尽美的完成它,让我深感对数据结构一门课程学习的不足。
也让我对课程设计这门课有了新的认识。
数据结构刚开始时老师说,我教给你们的不是编程。
当初想,这整本书都是说编程的,怎么会“不是编程”?现在明白了算法一词的重要性,编程的核心是算法的掌握。
以前的程序语言的学习只是像学外语学了单词一样,会使用了编程的工具,认识了编程的单词,真正的编程是算法的学习,就像是外语的语法的掌握一样重要。
这个程序所涉及的图的知识及迪杰斯特拉算法等知识均是离散数学和图论等数学课程中的知识,对数学知识的学习不足,接触不深,部分数学知识未学习的我难度又加大了一层,使得行动步步都捉襟见肘。
知识的学习和应用不是专业局限性的,知识之间是广泛联系的,数学与计算机专业知识之间的联系异常紧密。
五、测试结果及其分析1、主函数及主菜单的输出图42、查询景点信息选择测试数据景点编号5。
测试结果如下3、查找最短路径测试数据南校门至体育场路径结果如下:图5 4、查找所有路径测试数据行政楼至主教学区结果如下(为完全显示)图6 5、结束程序结果如下图7六、用户使用说明1、主菜单界面程序运行进入主菜单可以看到选择操作菜单如下图图82、由菜单显示信息选择相应操作(1)、选择1,查询景点信息输入景点编号。
程序输出景点相关信息。
(2)、选择2,查找两点间最短路径按提示依次输入起点景点编号及终点景点编号。
程序输出建议路径即为两点间最短路径。
(3)、选择3,查找所有路径按提示输入查找的两点。
程序输出两点间所有路径。
(4)、选择4,退出程序程序循环运行结束。
若不选择4操作,程序将继续等待操作选择不结束。
3、程序编译环境为Microsoft Visual C++ 6.0。
七、参考文献:1、谭浩强.C程序设计(第三版).北京:清华大学出版社,2005年7月2、王昆仑。
数据结构与算法。
北京:中国铁道出版社,2007年6月第1版3、章炯民,窦亮,黄国兴。
数据结构与算法教程。
上海:华东师范大学出版社,2007年7月第1版4、侯风巍。
数据结构要点分析C语言版。
北京:北京航空航天大学出版社,2007年3月第1版八、附录源程序代码:// ************校园导游程序#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <string.h>#define Maxn 20#define Maxint 999int path[Maxn][Maxn];int n=10; //顶点数int e=13; //边数int cost[Maxn][Maxn]; //邻接矩阵struct PlaceName {char name[10];}Place[11];struct PlaceName Place[11]={{""},{"南校门"},{"行政楼"},{"东校门"},{"主教学区"},{"图书馆"},{"礼堂"},{"体育场"},{"食堂"},{"宿舍区"},{"荷塘"},}; //景点名结构数组void *creat() //输入邻接矩阵{int i,j;for (i=1;i<=n;i++)for (j=1;j<=n;j++)cost[i][j]=Maxint; //置空邻接表cost[1][2]=cost[2][1]=5;cost[1][3]=cost[3][1]=10;cost[1][4]=cost[4][1]=5;cost[2][6]=cost[6][2]=2;cost[3][4]=cost[4][3]=4;cost[3][7]=cost[7][3]=7;cost[4][5]=cost[5][4]=2;cost[4][10]=cost[10][4]=3;cost[5][6]=cost[6][5]=3;cost[5][9]=cost[9][5]=8;cost[6][9]=cost[9][6]=5;cost[7][8]=cost[8][7]=2;cost[8][9]=cost[9][8]=5;cost[9][10]=cost[10][9]=3; //赋值邻接表return cost;}void infor (int p) //查询景点信息{char *st;int flen;FILE *fp;switch (p) //选择文件读取路径{case 1:fp=fopen("A1.txt","r"); break; case 2:fp=fopen("A2.txt","r"); break;case 3:fp=fopen("A3.txt","r"); break;case 4:fp=fopen("A4.txt","r"); break;case 5:fp=fopen("A5.txt","r"); break;case 6:fp=fopen("A6.txt","r"); break;case 7:fp=fopen("A7.txt","r"); break;case 8:fp=fopen("A8.txt","r"); break;case 9:fp=fopen("A9.txt","r"); break;case 10:fp=fopen("A10.txt","r"); break;}fseek (fp,0L,SEEK_END); //文件尾flen=ftell(fp); //文件长度st= (char *)malloc (flen+1);fseek (fp,0L,SEEK_SET); //文件尾fread (st,flen,1,fp);st[flen]=0;printf ("%s",st);printf ("\n");fclose (fp);free (st);} //由文本提取景点信息void DJ_shortestpath(int v0,int v1) //最短路径函数(dirjstra算法){int temp[Maxn];int t=0;int i,j,k;int min,pre;int dist[Maxn]; //存放顶点i的当前最短路径长度int path[Maxn]; //存放顶点i的最短路径上的前驱顶点int dianji[Maxn]; //若 dianji[i]=1,则顶点属于在最短路径顶点集合中for (i=1;i<=n;i++) //初始化dist[i],path[i]{dist[i]=cost[v0][i];if (dist[i]<Maxint)path[i]=v0;else path[i]=-1;}for (i=1;i<=n;i++)dianji[i]=0;dianji[v0]=1;dist[v0]=0;for(i=1;i<n;i++){min=Maxint;for(j=1;j<=n;j++)if((!dianji[j])&&(dist[j]<min)){min=dist[j];k=j;}dianji[k]=1;for(j=1;j<=10;j++)if((!dianji[j]) && (dist[k]+cost[k][j]<dist[j])){dist[j]=dist[k]+cost[k][j];path[j]=k;}}printf("[%s]==>[%s]最短距离是%d00米\n\n",Place[v0].name,Place[v1].name,dist[v1]);printf ("建议路径:\n");pre=path[v1];while(pre!=-1){ //路径倒序存入临时数组temp[t++]=pre;pre=path[pre];}for (i=t-1;i>=0;i--)printf ("[%s]==>",Place[temp[i]].name); //倒序输出临时数组printf ("[%s]",Place[v1].name);printf("\n\n");}typedef struct st1{int adjvex;struct st1 *nextarc;}Arcnode; //结点类型typedef struct Vexnode{Arcnode *firstarc;}Vexnode,Adjlist[11]; //表头结点typedef struct{Adjlist vextices;int vexnum,arcnum;}Algraph; //邻接表类型Algraph alg; //定义邻接表typedef struct //栈结构{int data[Maxn];int top;}Seqstack;Seqstack *setstack() //创建栈{Seqstack *S;S=(Seqstack *)malloc(sizeof(Seqstack));S->top=-1;return S;}int stackempty(Seqstack *S) //判栈空{if(S->top>=0)return 0;else return 1;}void push(Seqstack *S,int x) //入栈{if(S->top<n && S->top>=-1){S->top++;S->data[S->top]=x;}else printf("error");}void pop(Seqstack *S) //出栈{if(S->top>=0)S->top--;else printf("error!");}Seqstack *S;Algraph creat_Adjlistgraph() //转换邻接表{int i,j;Arcnode *p,*q;Adjlist al;for(i=0;i<=n;i++) //初始化表头结点数组al[i].firstarc=NULL;for(i=0;i<=n;i++)for(j=0;j<=i;j++)if(cost[i][j]!=Maxint){p=(Arcnode *)malloc(sizeof(Arcnode));p->adjvex=j;p->nextarc=al[i].firstarc;al[i].firstarc=p;q=(Arcnode *)malloc(sizeof(Arcnode));q->adjvex=i;q->nextarc=al[j].firstarc;al[j].firstarc=q;}for(i=0;i<=n;i++)alg.vextices[i]=al[i];alg.vexnum=n;alg.arcnum=e;return alg;}int visit[11]; //0表示未被访问,1表示已被访问void PathSearch(int j) //寻找路径{int k,i;Arcnode *p;k=S->data[S->top];p=alg.vextices[k].firstarc; //栈初始化while(p!=NULL){if(visit[p->adjvex]==0){if(p->adjvex==j) //输出栈中元素{for(i=0;i<S->top+1;i++)if (S->data[i]!=0){printf("[%s]=>",Place[S->data[i]].name);}printf("[%s]\n",Place[j].name);}else{visit[p->adjvex]=1; push(S,p->adjvex); PathSearch(j);} }p=p->nextarc;}visit[S->data[S->top]]=0; pop(S);}void Allpath() //两点之间的所有路径{int i,j;S=setstack();for(i=0;i<=10;i++) //初始化标志数组(是否已经过)visit[i]=0;printf("输入需查找的两点:\n");scanf("%d%d",&i,&j);printf ("[%s]=>[%s] 所有路径如下:\n",Place[i].name,Place[j].name);push(S,i);visit[i]=1;while(stackempty(S)!=1){PathSearch(j); //调用路径函数}}main () //主函数{ int s,o;int w,x,p;Algraph alg;creat ();printf ("\t\t==================校园地图==================\n");printf ("景点编号如下\n");for (w=0;w<10;w++){printf ("%d\t%s\t\t",w+1,Place[w+1].name);if (w%2==1) printf ("\n");}for (; ;){printf ("\n\t查询景点信息——1\n\t查找路径——2\n\t查找所有路径——3\n\t退出程序——4\n");printf ("请选择操作:");scanf ("%d",&x);switch (x){case 1:printf ("输入待查询景点编号:");scanf ("%d",&p);infor (p);printf ("\n");break;case 2:printf ("输入起点编号:");scanf ("%d",&s);printf ("输入终点编号:");scanf ("%d",&o);DJ_shortestpath(s,o);printf ("\n");break;case 3:alg=creat_Adjlistgraph();Allpath();break;case 4:printf ("结束程序!");}if (x==4) break; } }。