课程设计--最短路径:拯救007

合集下载

数据结构课程设计报告 最短路径:拯救007

数据结构课程设计报告   最短路径:拯救007

数据结构课程设计报告最短路径:拯救007专业 物联网工程学生姓名班级学号指导教师完成日期2016年1月13日目录1、课程设计目的及要求 (1)2、课题总体设计 (2)3、详细设计 (4)4、图像文件 (7)5、调试与测试 (10)6、小结 (10)7、参考文献 (16)8、源程序清单 (17)数据结构程序设计数据结构程序课程的设计1、课程设计目的及要求1)设计题目看过007系列电影的人们一定很熟悉James Bond这个世界上最著名的特工了。

在电影“Live and Let Die”中James Bond被一组毒品贩子抓住并且关到湖中心的一个小岛上,而湖中有很多凶猛的鳄鱼。

这时James Bond做出了最惊心动魄的事情来逃脱——他跳到了最近的鳄鱼的头上,在鳄鱼还没有反应过来的时候,他又跳到了另一只鳄鱼的头上……最后他终于安全地跳到了湖岸上。

假设湖是100×100的正方形,设湖的中心在(0,0),湖的东北角的坐标是(50,50)。

湖中心的圆形小岛的圆心在(0,0),直径是15。

一些凶猛的鳄鱼分布在湖中不同的位置。

现已知湖中鳄鱼的位置(坐标)和James Bond可以跳的最大距离,请你告诉James Bond一条最短的到达湖边的路径。

他逃出去的路径的长度等于他跳的次数。

2)输入要求程序从“input.txt”文件中读取输入信息,这个文件包含了多组输入数据。

每组输入数据的起始行中包含两个整数n和d,n是鳄鱼的数量而且n≤100,d是007可以跳的最大距离而且d>0。

起始行下面的每一行是鳄鱼的坐标(x,y),其中x, y都是整数,而且没有任何两只鳄鱼出现在同一个位置。

input.txt文件以一个负数结尾。

3)输出要求程序输出结果输出到output.txt文件中。

对于每组输入数据,如果007可以逃脱,则输出到output.txt文件的内容格式如下:第一行是007必须跳的最小的步数,然后下面按照跳出顺序记录跳出路径上的鳄鱼坐标(x,y),每行一个坐标。

八年级数学上册---《最短路径问题》课堂设计

八年级数学上册---《最短路径问题》课堂设计

八年级数学上册---《最短路径问题》课堂设计最短路径问题(第一课时) 在我们的学习生活中,接触过很多“最值问题”:最多最少,最长最短。

思考以下两个问题:复习1:如图,连接A 、B 两点的所有连线中,哪条最短?为什么?答:路线2最短,因为两点的所有连线中,线段最短,简称:两点之间,线段最短 复习2:点P 是直线l 外一点,点P 与该直线l 上各点连接的所有线段中,哪条最短?为什么?答:PC 最短,因为连接直线外一点与直线上各点的所有线段中,垂线段最短。

设计意图:复习“两点之间,线段最短”和“垂线段最短”,为最短路径问题做好铺垫。

通过识别,也让学生有动态的思想,在比较中,找到最短路径。

lC PA B D教师:刚刚的两个问题都是识别最短路径,接下来,我们尝试通过画图,找到最短路径。

引例1:如图,在直线l上求作一点C,使得CA+CB最短。

教师:(1)点C是直线l上的一个动点。

我们不妨先画一个一般的点C,连接CA,CB,我们的目标:找到一个点C,使得CA+CB最小。

(2)观察几何画板的演示:当C在运动的过程中,线段CA,CB也在移动,观察:什么时候线段和最短?(3)同学们可以观察到:当C是线段AB和l的交点,即ACB共线时,CA+CB 最短。

依据是:两点之间,线段最短。

作图方法:连接AB,交直线l于点C,点C即为所求。

总结:从一般的点C出发,从运动变化的角度观察图形,并用到“两点之间,线段最短”解决问题。

教师:接下来,我们用这样的方法,研究数学史上经典的“牧马人饮马问题”。

例1:如图,牧马人从A地出发,到一条笔直的河边l 饮马,然后到B地,牧马人到河边的什么地方饮马,可使所走的路径最短?BAl练习:有两棵树位置如图,树的底部分别为A,B,地上有一只昆虫沿着A—B 的路径在地面上爬行。

小树顶D处一只小鸟想飞下来抓住小虫后,再飞到大树的树顶C处。

问小鸟飞至AB之间何处时,飞行距离最短,在图中画出该点的位置。

《最短路径问题》示范教学方案

《最短路径问题》示范教学方案

第十三章轴对称13.4课题学习《最短路径问题》一、教学目标让学生能够利用轴对称、平移变换解决简单的最短路径问题,体会图形的变化在解决最值问题中的作用,感悟转化思想.二、教学重点及难点重点:利用轴对称、平移等变换将最短路径问题转化为“两点之间,线段最短”问题.难点:如何利用轴对称、平移将最短路径问题转化为线段(或线段的和)最短问题.三、教学用具电脑、多媒体、课件、刻度尺、直尺四、相关资源微课,动画,图片.五、教学过程(一)引言导入前面我们研究过一些关于“两点的所有连线中,线段最短”“连接直线外一点与直线上各点的所有线段中,垂线段最短”等的问题,我们称它们为最短路径问题.现实生活中经常涉及选择最短路径的问题,本节课我们将利用数学知识探究“将军饮马”和“造桥选址”两个极值问题.设计意图:直接通过引言导入新课,让学生明确本节课所要探究的内容和方向.(二)探究新知问题1如图,牧马人从A地出发,到一条笔直的河边l饮马,然后到B地.牧马人到河边的什么地方饮马,可使所走的路径最短?此图片是动画缩略图,本动画资源探索了将军饮马问题实际上就是最短路径问题,适用于最短路径问题的教学.若需使用,请插入【数学探究】最短路径问题.1.将实际问题抽象为数学问题学生尝试回答,并相互补充,最后达成共识.(1)把A,B两地抽象为两个点;(2)把河边l近似地看成一条直线,C为直线l上的一个动点,那么,上面的问题可以转化为:当点C在l的什么位置时,AC与CB的和最小.2.解决数学问题(1)由这个问题,我们可以联想到下面的问题:如图,点A,B分别是直线l异侧的两个点,如何在l上找到一个点,使得这个点到点A、点B的距离的和最短?利用已经学过的知识,可以很容易地解决上面的问题,即:连接AB,与直线l相交于一点C,根据“两点之间,线段最短”,可知这个交点C即为所求.(2)现在要解决的问题是:点A,B分别是直线l同侧的两个点,如何在l上找到一个点,使得这个点到点A、点B的距离和最短?(3)如何能把点B移到l的另一侧B′处,同时对直线l上的任一点C,都保持CB与CB′的长度相等,就可以把问题转化为“上图”的情况,从而使问题得到解决.(4)你能利用轴对称的有关知识,找到符合条件的点B′吗?学生独立思考后,尝试画图,完成问题.小组交流,师生共同补充得出:作法:①作点B关于直线l的对称点B′;②连接AB′,与直线l相交于点C.则点C即为所求.3.证明“最短”师生共同分析,证明“AC+BC”最短.证明:如图,在直线l上任取一点C′(与点C不重合),连接AC′,BC′,B′C′,由轴对称的性质知:BC=B′C,BC′=B′C′,∴AC+BC=AC+B′C=AB′,AC′+BC′=AC′+B′C′.在△AB′C′中,AB′<AC′+B′C′,∴AC+BC<AC′+BC′.即AC+BC最短.思考:证明AC+BC最短时,为什么要在直线l上任取一点C′(与点C不重合),证明AC+BC<AC′+BC′?这里“C′”的作用是什么?学生相互交流,教师适时点拨,最后达成共识.若直线l上任意一点(与点C不重合)与A,B两点的距离都大于AC+BC,就说明AC +BC最小.问题2(造桥选址问题)如图,A和B两地在一条河的两岸,现要在河上造一座桥MN.桥造在何处可使从A到B的路径AMNB最短?(假定河的两岸是平行的直线,桥要与河垂直.)此图片是动画缩略图,本动画资源探索了造桥选址问题,造桥选址问题实际上是最短路径问题,适用于最短路径问题的教学.若需使用,请插入【数学探究】造桥选址问题.1.将实际问题抽象为数学问题把河的两岸看成两条平行线a和b(下图),N为直线b上的一个动点,MN垂直于直线b,交直线a于点M,这样,上面的问题可以转化为下面的问题:当点N在直线b的什么位置时,AM+MN+NB最小?2.解决数学问题(1)由于河岸宽度是固定的,因此当AM+NB最小时,AM+MN+NB最小.这样,问题就进一步转化为:当点N在直线b的什么位置时,AM+NB最小?(2)如图,将AM沿与河岸垂直的方向平移,点M移动到点N,点A移动到点A′,则AA′=MN,AM+NB=A′N+NB.这样,问题就转化为:当点N在直线b的什么位置时,A′N +NB最小?(3)如图,在连接A′,B两点的线中,线段A′B最短.因此,线段A′B与直线b的交点N的位置即为所求.3.证明“最小”为了证明点N的位置即为所求,我们不妨在直线b上另外任意取一点N′,过点N′作N′M′⊥a,垂足为M′,连接AM′,A′N′,N′B,证明AM+MN+NB<AM′+M′N′+N′B.你能完成这个证明吗?证明:如图,在△A′N′B中,∵A′B<A′N′+BN′,∴A′N+BN+MN<AM′+BN′+M′N′.∴AM+MN+BN<AM′+M′N′+BN′.即AM+MN+BN最小.设计意图:通过“将军饮马问题”和“造桥选址问题”的解决,增强学生探究问题的信心,让学生通过轴对称、平移变换把复杂问题进行转化,有效突破难点,感悟转化思想的重要价值.六、课堂小结1.运用轴对称解决距离最短问题运用轴对称及两点之间线段最短的性质,将所求线段之和转化为一条线段的长,是解决距离之和最小问题的基本思路,不论题目如何变化,运用时要抓住直线同旁有两点,这两点到直线上某点的距离和最小这个核心,所有作法都相同.2.利用平移确定最短路径选址解决连接河两岸的两个点的最短路径问题时,可以通过平移河岸的方法使河的宽度变为零,转化为求直线异侧的两点到直线上一点所连线段的和最小的问题.设计意图:通过小结,使学生梳理本节所学内容,体会轴对称、平移在解决最短路径问题中的作用,感悟转化思想的重要价值.本图片资源总结归纳了两点在直线同侧的最短路径问题,适用于最短路径问题的教学.若需使用,请插入图片【知识点解析】最短路径问题-两点在直线同侧.本图片资源总结归纳了两点在直线异侧的最短路径问题,适用于最短路径问题的教学.若需使用,请插入图片【知识点解析】最短路径问题-两点在直线异侧.七、板书设计13.4 最短路径问题运用轴对称解决距离最短问题利用平移确定最短路径选址。

最短路径课程设计

最短路径课程设计

最短路径课程设计一、课程目标知识目标:1. 理解最短路径的概念,掌握其在现实生活中的应用;2. 学会使用Dijkstra算法和Floyd算法求解有向图和无向图的最短路径问题;3. 了解最短路径问题在实际问题中的应用和拓展。

技能目标:1. 能够运用所学算法解决简单的最短路径问题;2. 能够分析并优化最短路径算法,提高解决问题的效率;3. 能够运用数学语言和工具软件描述和求解最短路径问题。

情感态度价值观目标:1. 培养学生对图论和算法的兴趣,激发他们探索问题的热情;2. 培养学生合作交流、分享成果的团队精神;3. 培养学生运用数学知识解决实际问题的意识,提高他们的数学素养。

课程性质:本课程为选修课,旨在拓展学生的知识面,提高他们的数学应用能力。

学生特点:学生为八年级学生,已掌握基本的数学知识和逻辑思维能力,对新鲜事物充满好奇。

教学要求:结合学生特点,通过生动的案例导入,激发学生兴趣;采用问题驱动的教学方法,引导学生主动探究;注重理论与实践相结合,提高学生的实际操作能力。

在教学过程中,关注学生的个体差异,给予个性化指导,确保课程目标的实现。

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

二、教学内容1. 图的基本概念:图的定义、顶点、边、路径、连通图、有向图与无向图。

2. 最短路径问题:最短路径的定义、性质及其在实际问题中的应用。

3. Dijkstra算法:算法原理、步骤、示例演示及编程实现。

4. Floyd算法:算法原理、步骤、示例演示及编程实现。

5. 最短路径问题的拓展:多源最短路径、带有权重和负权边的最短路径问题。

6. 教学案例:结合实际生活中的问题,如交通网络、计算机网络等,分析最短路径问题。

7. 教学实践:运用算法解决具体的最短路径问题,对比不同算法的性能。

教学内容安排和进度:第一课时:图的基本概念及最短路径问题导入。

第二课时:Dijkstra算法原理及示例。

第三课时:Floyd算法原理及示例。

最短路径的课程设计

最短路径的课程设计

最短路径的课程设计一、课程目标知识目标:1. 学生能理解最短路径的概念,掌握其在现实生活中的应用。

2. 学生能掌握图论中关于最短路径的基本理论,如Dijkstra算法和Floyd算法。

3. 学生能运用所学算法解决实际问题,找出给定图中的最短路径。

技能目标:1. 学生能够运用数学思维分析图论问题,提出合理的解决方案。

2. 学生能够运用计算工具(如计算机软件)解决复杂的图论问题。

3. 学生通过小组合作,培养团队协作能力和沟通技巧。

情感态度价值观目标:1. 学生能够认识到数学在解决实际问题中的重要性,增强学习数学的兴趣和信心。

2. 学生在解决问题的过程中,培养勇于尝试、不断探索的精神。

3. 学生通过课程学习,体会团队合作的力量,树立合作共赢的价值观。

课程性质分析:本课程为中学数学课程,结合图论知识,旨在培养学生的逻辑思维能力和实际应用能力。

学生特点分析:初中生具有较强的求知欲和好奇心,喜欢探索新知识,但可能缺乏实际应用经验和团队协作能力。

教学要求:1. 教师应注重理论与实践相结合,提高学生的实际操作能力。

2. 教师应鼓励学生积极参与课堂讨论,培养他们的逻辑思维和表达能力。

3. 教师要关注学生的个体差异,因材施教,使每个学生都能在课程中收获成长。

二、教学内容本课程教学内容主要包括以下几部分:1. 图论基础知识:- 图的概念、分类及表示方法。

- 图的连通性、路径、回路等基本概念。

2. 最短路径算法:- Dijkstra算法:解决单源最短路径问题。

- Floyd算法:解决多源最短路径问题。

3. 实际应用案例分析:- 生活中的最短路径问题,如地图导航、网络路由等。

- 数学建模方法在实际问题中的应用。

4. 教学案例及练习:- 针对不同知识点设计教学案例,引导学生运用所学算法解决实际问题。

- 配合教材章节,提供适量练习题,巩固所学知识。

教学大纲安排如下:第1课时:图论基础知识- 知识点:图的表示方法、连通性、路径、回路。

《最短路径问题》微课程设计

《最短路径问题》微课程设计

● 分析《最短路径问题》是人教版数学八年级上册第十三章《轴对称》的第四课。

本节课是学生在学习完轴对称后,为让他们能灵活运用轴对称解决最短路径问题而设计的。

教学内容是利用学生刚刚学习过的轴对称,把在直线同侧的两个点转化为在直线异侧的两个点,化折线段为直线段,从而找到最短路径。

因此化折为直是本节课的重点。

本节课是学生首次遇到“线段和最小”问题,学生的储备知识是已经学习了关于两点之间最短距离的确定和轴对称的性质,但是学生的知识迁移能力不强,自主探究能力差,需要教师设计合理的探究问题,引导他们学会探究的方法。

对于问题的证明,本节课涉及的辅助线比较多,而目前学生的证明多为比较简单的说理,涉及的辅助线一般为一条。

这就需要教师把问题分解成一个个的小问题,从简单到复杂,使学生水到渠成地完成知识的学习。

因此,学会知识迁移和化繁为简是本节课的难点。

综上所述,笔者确定本课学习目标为:①能利用轴对称解决简单的最短路径问题;②能体会图形的变化在解决最值问题中的作用;③能感悟化折为直的转化思想。

本课重点为:利用轴对称,确定最短路径的作图,将最短路径问题转化为线段和最小问题;难点为:探索发现“最短路径”的方案及说理。

基于对教材的分析和对学生学情的了解,笔者将本节课的“将军饮马部分”制作成微课程,设计了“课前自主学习任务单”,并制作了配套的微视频供学生在课前自主学习使用。

● 设计1.课前自主学习任务单课前学习任务单主要为了指导学生自主学习,这需要教师把教学目标转化为达成目标,而达成目标必须通俗易懂、指向性强,才能让学生根据达成目标完成课前学习任务。

在学习内容上学生以了解基础知识为主,所以笔者设计的任务也相对简单直接。

例如,会找点仅是文字与图形之间的简单转化;看过视频后,学生基本能直观地看到点在移动过程中的最佳位置;为了适应不同能力的学生学习,笔者还设计了一个相对复杂的图形,增加了干扰线并改变了点的位置,只要学生能找到与原问题对应的点就算过关。

全国初中数学优秀课一等奖教师教学设计:最短路径--教学设计

全国初中数学优秀课一等奖教师教学设计:最短路径--教学设计

全国初中数学优秀课一等奖教师教学设计:最短路径–教学设计一. 教材分析“最短路径”是初中数学中的一重要内容,主要让学生了解最短路径的概念,掌握求解最短路径的方法。

通过本节课的学习,学生能够理解最短路径的定义,学会使用图论中的迪杰斯特拉算法求解最短路径问题。

二. 学情分析学生在学习本节课之前,已经掌握了图的基本概念,如顶点、边、路径等。

但他们对最短路径的概念和求解方法可能较为陌生。

因此,在教学过程中,需要引导学生通过已有的图的知识,去理解和掌握最短路径的相关知识。

三. 教学目标1.理解最短路径的定义。

2.学会使用迪杰斯特拉算法求解最短路径问题。

3.培养学生的逻辑思维能力和问题解决能力。

四. 教学重难点1.最短路径的定义。

2.迪杰斯特拉算法的理解与应用。

五. 教学方法采用问题驱动法、案例教学法和小组合作学习法。

通过设置问题情境,引导学生主动探究;通过分析实际案例,让学生理解和掌握最短路径的求解方法;通过小组合作学习,培养学生的团队协作能力。

六. 教学准备1.PPT课件。

2.相关案例资料。

3.练习题。

七. 教学过程1.导入(5分钟)通过一个实际问题情境,如两个人从同一城市出发,到达另一个城市,如何选择路径使得距离最短。

引导学生思考最短路径的概念。

2.呈现(15分钟)呈现最短路径的定义,以及迪杰斯特拉算法的原理和步骤。

通过图例,让学生直观地理解最短路径的求解过程。

3.操练(20分钟)学生分组,每组选择一个案例,运用迪杰斯特拉算法求解最短路径。

教师巡回指导,解答学生疑问。

4.巩固(10分钟)学生独立完成练习题,检验自己对于最短路径知识的理解和掌握。

教师选取部分题目进行讲解。

5.拓展(10分钟)引导学生思考最短路径在实际生活中的应用,如地图导航、网络路由等。

让学生举例说明最短路径在实际问题中的应用。

6.小结(5分钟)总结本节课的主要内容,强调最短路径的定义和迪杰斯特拉算法的应用。

7.家庭作业(5分钟)布置课后作业,巩固最短路径的相关知识。

最短路径_数据结构课程设计报告

最短路径_数据结构课程设计报告

最短路径_数据结构课程设计报告第一篇:最短路径_数据结构课程设计报告数据结构课程设计《数据结构》课程设计报告设计题目:____医院选址____________ 姓名:__________________ 学号:________________ 专业:___________院系:____________班级:_________________ 指导教师:_________________年 1月 3 日数据结构课程设计一、问题描述(1)题目内容:有n个村庄,现要从这n个村庄中选择一个村庄新建一所医院,使其余的村庄到这所医院的距离总和来说较短。

(n>=5)(2)基本要求:(3)可以输出每一对点间的路径长度;然后选取偏心度,最小的偏心度即为所求。

二、需求分析(4)本程序的功能包括找出每一对点间的路径长度。

(5)然后算出每一对点的偏心度。

(6)其中最小的偏心度即为所求。

三、概要设计操作集合:(7)public:MGraph(DataType a[],int b[][MaxSize],int n,int e);//初始化邻接矩阵和路径(8)void Floyd();//弗洛伊德算法的实现(9)void getE();//获取偏心度(10)void showdist();//把每一对顶点之间的路径权值show出来(11)~MGraph(){} //类的析构函数四、数据结构设计(1)DataType vertex[MaxSize];//存放图中顶点的数组(2)intarc[MaxSize][MaxSize];//存放图中边的数组(3)string path[MaxSize][MaxSize];//存放从Vi到Vj的最短路径,初始为//path[i][j]=“ViVj”(4)int dist[MaxSize][MaxSize];//存放求得的最短路径长度(5)int vertexNum, arcNum;//图的顶点数和边数(6)int E[MaxSize][2];//获取最小偏心度和该顶点五、算法设计1.算法分析1)对带权有向图的,调用Floyd算法,对每一对顶点间的最短路径长度的矩阵;2)对最短路径长度矩阵的每列求最大值,即得到各点的偏心度;3)具有最小偏心度的顶点即为所求。

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

《数据结构课程设计》报告最短路径—拯救007专业 xxxxxx学生姓名 xxxx班级 xxxx学号 xxxx指导教师 xxxxx完成日期 xxxxxx目录一、简介 (3)二、算法说明 (4)三、测试结果 (7)参考文献 (14)一、简介最短路径是,在一个图中,若从一个顶点到另一个顶点存在着一条路径(这里只讨论无回路的简单路径),则称该条路径长度为为该路径上所有经过的边的数目,它也等于该路径上的顶点数减1。

由于从一个顶点到另一个顶点可能存在着多条路径,在每条路径上所经过的边数可能不同,把路径长度最短(经过的边数最少)的那条路径叫做最短路径,其路径长度叫做最短距离。

这是对无权图而言的,若图是帯权图,则把从一个顶点vi到vj的一条路径上所有经过边的权值之和定义为该路径的带权路径长度。

把带权路径长度最短的那条路径称为该有权图的最短路径,其路径长度称为最短距离。

Dijksra算法:如何求解从一个顶点到其余每个顶点的最短路径呢?狄克斯特拉于1959年提出了解决此问题的一种按路径长度的递增次序产生最短路径的算法。

基本思想是,从图中给定源点到其他各个顶点之间客观上应个存在一条最短路径,在这组最短路径中,按其长度的递增次序求出到不同顶点的最短路径和路径长度。

图是一种较线性结构和树形结构更为复杂的非线性数据结构,这种复杂性主要来自数据元素之间的复杂关系。

在图结构中,任何两个数据元素之间都可能存在关系,一般用顶点表示数据元素,而用顶点之间的连线表示数据元素之间的关系。

图的二元组定义为:G=(V,E)。

其中V是非空的顶点集合,E是V上的二元关系集合。

题目内容:看过007系列的电影的人们一定很熟悉Jams Bond这个世界上最著名的特工了。

在电影“Live And Let Die”中Jams Bond被一组毒品贩子抓住并且关到湖中心的一个小岛上,而湖中有很多凶猛的鳄鱼。

这时Jams Bond做出了一个最惊心动魄的事情来逃脱——他跳到了最近的鳄鱼的头上,在鳄鱼还没有反映过来的时候,他有跳到另一支鳄鱼的头上.。

最后他终于安全地跳到了湖岸上。

假设湖是100*100的正方形,设湖的中心在(0,0),湖的东北角的坐标是(50,50)。

湖中心的圆环小岛的圆心在(0,0),直径是15.。

一些凶残的鳄鱼分布在湖中不同的位置。

现已知的湖中的鳄鱼的位置和Jams Bond可以跳的最大距离,请你告诉Jams Bondyitiao 最短的到达湖边的路径。

他逃出去的路径长度等于他跳的次数。

二、算法说明程序从“input.txt”文件中读取输入信息,这个文件包含了多组输入数据。

每组输入数据的起始行中包含了两个整数n和d,n是鳄鱼的数量而且n<=100,d是007可以跳的最大距离而且d>0。

起始行下面的每一行是鳄鱼的坐标(x,y),其中x,y都是整数,而且没有任何两只鳄鱼出现在同一位置。

Input.txt文件以一个负数结尾。

输出要求:程序结果输出到output.txt文件中。

对于每组输入数据,如果007可以逃脱,则输出到output.txt文件的内容格式如下:第一行是007必须跳的最小步数,然后按照跳出顺序记录跳出路径上的鳄鱼坐标(x,y),每行一个坐标。

如果007不可能跳出去,则将-1写入文件。

如果这里有很多个最短路径,只需输入其中的任意一种。

输入例子:410 /*第一组输入数据*/17 027 037 045 01 10 /*第二组输入数据*/20 30-1输出例子:5 /*对应第一组数据的输出*/17 027 045 0-1 /*对应第二组数据的输出*/提示:将每个鳄鱼看作图中的每一个顶点。

如果007可以从A点跳到B点,则A和B之间就有一条边。

主要数据结构与算法:为了记录007跳过的路径,可定义为如下结构:typedef unsigned int Vertez;typedef double Distance;typedef struct GraphNodeRecord{int X; /*x轴坐标*/int Y; /*y轴坐标*/unsigned int Step; /*记录到本节点一共跳了多少步*/Vertex Path; /*指向本节点的父节点,即跳到本节点之间007所在节点*/}GraphNode;typedef GraphNode*Grapha;寻找跳出路径的算法:/*读出一组测试数据返回007跳过的路径Graph,*Bank记录最短到达湖岸的路径。

该算法实际上是应用队列对图惊醒广度搜索,以寻找到岸边的最短路径,其中入队列与出队列函数分别是Inject()和Pop()*/Graph read_case(FILE * InFile,int num,Vertex* Bank,Deque D){Graph G=NULL;Distance JamesJump;Vertex V;int x,y;int i,Times;*Bank = 0; /*初始化跳出的路径的记录*/fscanf(Infile,”%lf”,&JamesJump);/*读取步长*/if(Bond can jumo to the bank directly){*Bank=1; /*直接跳出的情况*/}else if (num>0) /*007必须经过鳄鱼头上的情况*/{num+=2;G=GraphNew”(num);for(i=2;i<num;i++) /*第3个node开始是鳄鱼*/{if(Bond can jump to G[i] from island) /*判断是否能从岛上跳上该点*/ {G[i].Path=1;G[i].Step=1; /*一步*/if(Bond can jump to bankfrom G[i]) /*判断该点是否能跳出*/{*Bank =i; /*007可以跳出,记录该点*/Skip other crocodilebreak;}elseInject(i,D);/*插入该点,并开始下一个检测*/}}while(!IsEmpty(D)) /*只经过一只鳄鱼无法跳出,必须还要跳到其他鳄鱼的情况*/{V=Pop(D);for(i=2;i<num;i++)/*从这只鳄鱼跳到其他各只鳄鱼*/{if(bond can jump from v to i,and step of i>step of v+1){G[i].Path=V;G[i].Step= G[V].Step+1;/*把i点练到v点后面*/if(bond can jump from ito bank and the path is shorter than others)*Bank=i;elseInject(i,D);}}}}return G;}在执行完算法read_case后,*Bank值可能如下3种可能:(1)0,意味着007无法逃脱出去;(2)1,意味着007可以直接从岛上跳出去,而不用经过鳄鱼的脑袋;(3)k,返回的第k点是007经过最短路径逃出鳄鱼潭是经过的最后一个顶点。

可以根据G[k]的path参数来追踪该点的上一点,由此类推可以得到007逃脱的最短路径。

三、测试结果对于本程序,需要应用各种类型的测试用例来进行测试。

一般来说,可以设计一下几种类型的测试用例。

•007步长很大,以至于可以直接跳出,例如:043- 1•007不可能逃出去的情况(根本就没有鳄鱼),例如:0 1- 1•一般情况的例子,例如:4 1017 027 037 045 01 1020 30- 1•最短路径有多条,只需要输出任意一种即可,例如:25 108 89 910 1011 1112 1213 1314 1415 1516 1618 1820 2023 2325 2527 2728 2829 2931 3133 3335 3538 3841 4146 4647 4749 49输出结果:79 916 1623 2328 2835 3541 41•input.txt文件中,名称不正确、空文件、缺少部分输入等不规范情况,例如:5 1010 10-25 3030 30注:缺少鳄鱼点(应有5个鳄鱼点)和文件结尾符(-1)。

运行结果:输入数据:0 430 14 1017 027 037 045 01 1020 3025 108 89 910 1011 1112 1213 1314 1415 1516 1618 1820 2023 2325 2527 2728 2831 3133 3335 3538 3841 4144 4446 4647 4749 4910 2010 1020 2010 30 输出结果1-1517 027 037 045 0-179 916 1623 2328 2835 3541 41310 1010 303-10 -10-10 -303-10 -10-30 -10310 1030 10310 10-1710 10 10 15 20 15 22 22 31 20 40 20 -17-10 -8 -15 -15四、分析与探讨1.明确题目中的已知条件(1)007被关的小岛在湖的中心;(2)小岛是圆形,圆心在(0,0),而且直径是15;(3)没有两只鳄鱼在同一个位置;(4)鳄鱼的坐标值都是整数。

2.一些判断007是否能跳出的细节(1)判断007是否能够直接从岛上跳到湖岸:由已知条件可得,湖是一个正方形,边长为100,中心是在(0,0),四个顶点分别是(50,50),(50,-50),(-50,-50),(-50,50)。

而湖中小岛的直径是15.所以如果007可以跳大于等于(50-15/2)=42.5,他就可以直接从小岛跳到湖岸,而不用经过鳄鱼。

(2)判断007是否能够直接从岛上跳到湖中点A:已知半径是7.5,假设点A的坐标是(x,y),007的步长是L,则当点A到中心(0,0)的距离小于等于007的步长加上小岛的半径7.5的时候就能确定007可以从岛上跳到点A,即:x*x+y*y<=(L+7.5)*(L+7.5)。

(3)判断007是否能够从点A跳到点B:假设007的步长是L所以如果两点之间的距离小于等于L,则判断007可以从A跳到B,即(A.x-B.x)^2+(A.y-B.y)^2<=L*L;其他情况时007不能从A点跳到B点。

(4)判断007是否能够从点A跳到湖岸:当从A点到湖岸的距离小于等于007的步长的时候,说明他可以从A点跳到湖岸,|A.x|+L>=50或|A.y|+L>=50;其他情况时007不能从A点跳到湖岸。

五、小结经历了这次课程设计实践,我感触颇深。

此前一直错误的以为做课程设计其实是件很简单的事情,根本不需要兴师动众而且花费那么长的时间,两三天足矣。

相关文档
最新文档