数据结构课程设计报告最短路径拯救(共22页).doc
《数据结构课程设计报告最短路径拯救(共22页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告最短路径拯救(共22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构课程设计报告最短路径:拯救007专业物联网工程学生姓名班级学号指导教师完成日期2016年1月13日专心-专注-专业目 录数据结构程序课程的设计1、 课程设计目的及要求 1)设计题目看过007系列电影的人们一定很熟悉James Bond这个世界上最著名的特工了。在电影“Live and Let Die”中James Bond被一组毒品贩子抓住并且关到湖中心的一个小岛上,而湖中有很多凶猛的鳄鱼。这时James Bond做出了最惊心动魄的事情来逃脱他跳到了最近的鳄鱼的头上,在鳄鱼还没有反应过来的时候,他又跳到了另一只鳄鱼的头上最后他终于安全地跳到了湖岸上。假设湖是1
2、00100的正方形,设湖的中心在(0,0),湖的东北角的坐标是(50,50)。湖中心的圆形小岛的圆心在(0,0),直径是15。一些凶猛的鳄鱼分布在湖中不同的位置。现已知湖中鳄鱼的位置(坐标)和James Bond可以跳的最大距离,请你告诉James Bond一条最短的到达湖边的路径。他逃出去的路径的长度等于他跳的次数。2)输入要求程序从“input.txt”文件中读取输入信息,这个文件包含了多组输入数据。每组输入数据的起始行中包含两个整数n和d,n是鳄鱼的数量而且n100,d是007可以跳的最大距离而且d0。起始行下面的每一行是鳄鱼的坐标(x,y),其中x, y都是整数,而且没有任何两只鳄鱼出
3、现在同一个位置。input.txt文件以一个负数结尾。3)输出要求程序输出结果输出到output.txt文件中。对于每组输入数据,如果007可以逃脱,则输出到output.txt文件的内容格式如下:第一行是007必须跳的最小的步数,然后下面按照跳出顺序记录跳出路径上的鳄鱼坐标(x,y),每行一个坐标。如果007不可能跳出去,则将-1写入文件。如果这里有很多个最短的路径,只需输出其中的任意一种2、课题总体设计2.1设计分析1.明确题目中的已知条件(1)007被关的小岛在湖的中心;(2)小岛是圆形,圆心在(0,0),而且直径是15;(3)没有两只鳄鱼在同一个位置;(4)鳄鱼的坐标值都是整数。2.一
4、些判断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、.5)*(L+7.5)。(3)判断007是否能够从点A跳到点B:假设007的步长是L所以如果两点之间的距离小于等于L,则判断007可以从A跳到B,即(A.x-B.x)2+(A.y-B.y)2=50或|A.y|+L=50;其他情况时007不能从A点跳到湖岸。 2. 系统流程图开始初始化路径能否直接跳出?跳出有无鳄鱼?能否从岛上跳上该点?记录该点能否跳出该点?记录该点插入该点,检测下一点结束判断能否跳出,并比其他短3、详细设计 主要数据结构与算法: 为了记录007跳过的路径,可定义为如下结构:typedef unsigned int Vertez;typedef double Distance;t
6、ypedef struct GraphNodeRecordint X; /*x轴坐标*/int Y; /*y轴坐标*/unsigned int Step; /*记录到本节点一共跳了多少步*/Vertex Path; /*指向本节点的父节点,即跳到本节点之间007所在节点*/GraphNode;typedef GraphNode*Grapha;寻找跳出路径的算法:/*读出一组测试数据返回007跳过的路径Graph,*Bank记录最短到达湖岸的路径。该算法实际上是应用队列对图惊醒广度搜索,以寻找到岸边的最短路径,其中入队列与出队列函数分别是Inject()和Pop()*/Graph read_ca
7、se(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 (num0) /*007必须经过鳄鱼头上的情况*/ num+=2; G=GraphNew”(num);
8、 for(i=2;inum;i+) /*第3个node开始是鳄鱼*/ if(Bond can jump to Gi from island) /*判断是否能从岛上跳上该点*/ Gi.Path=1; Gi.Step=1; /*一步*/ if(Bond can jump to bankfrom Gi) /*判断该点是否能跳出*/ *Bank =i; /*007可以跳出,记录该点*/ Skip other crocodile break; else Inject(i,D);/*插入该点,并开始下一个检测*/while(!IsEmpty(D) /*只经过一只鳄鱼无法跳出,必须还要跳到其他鳄鱼的情况*/
9、 V=Pop(D);for(i=2;istep of v+1) Gi.Path=V; Gi.Step= GV.Step+1;/*把i点练到v点后面*/ if(bond can jump from ito bank and the path is shorter than others) *Bank=i; else Inject(i,D); return G;在执行完算法read_case后,*Bank值可能如下3种可能:(1)0,意味着007无法逃脱出去;(2)1,意味着007可以直接从岛上跳出去,而不用经过鳄鱼的脑袋;(3)k,返回的第k点是007经过最短路径逃出鳄鱼潭是经过的最后一个顶点。
10、可以根据Gk的path参数来追踪该点的上一点,由此类推可以得到007逃脱的最短路径。4、图像文件5、调试与测试5.1)调试打开工程文件,如图1所示:(图一打开工程)运行,出现如图2所示:(图二运行)5.2)测试方法:007步长很大,以至于可以直接跳出,例如:431007不可能逃出去的情况(根本就没有鳄鱼),例如:11一般情况的例子,例如:4 1017 027 037 045 01020 30 1最短路径有多条,只需要输出任意一种即可,例如:25 108 89 910 1011 1112 1213 1314 1415 1516 1618 1820 2023 2325 2527 2728 2829
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 路径 拯救 22
限制150内