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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(数据结构课程设计报告 最短路径拯救007Word文档下载推荐.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告 最短路径拯救007Word文档下载推荐.docx

1、如果007不可能跳出去,则将-1写入文件。如果这里有很多个最短的路径,只需输出其中的任意一种2、课题总体设计2.1设计分析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.

2、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=50或|A.y|+L=50;其他情况时007不能从A点跳到湖岸。 2.系统流程图开始初始化路径能否直接跳出?跳

3、出有无鳄鱼?能否从岛上跳上该点?记录该点能否跳出该点?插入该点,检测下一点结束判断能否跳出,并比其他短3、详细设计 主要数据结构与算法: 为了记录007跳过的路径,可定义为如下结构:typedef unsigned int Vertez;typedef double Distance;typedef struct GraphNodeRecordint X; /*x轴坐标*/int Y; /*y轴坐标*/unsigned int Step; /*记录到本节点一共跳了多少步*/Vertex Path; /*指向本节点的父节点,即跳到本节点之间007所在节点*/GraphNode;typedef G

4、raphNode*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,”%

5、lf”,&JamesJump);/*读取步长*/ if(Bond can jumo to the bank directly) *Bank=1; /*直接跳出的情况*/ else if (num0) /*007必须经过鳄鱼头上的情况*/ num+=2; G=GraphNew”(num); 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; return G;在执行

6、完算法read_case后,*Bank值可能如下3种可能:(1)0,意味着007无法逃脱出去;(2)1,意味着007可以直接从岛上跳出去,而不用经过鳄鱼的脑袋;(3)k,返回的第k点是007经过最短路径逃出鳄鱼潭是经过的最后一个顶点。可以根据Gk的path参数来追踪该点的上一点,由此类推可以得到007逃脱的最短路径。4、图像文件5、调试与测试5.1)调试打开工程文件,如图1所示:(图一打开工程)运行,出现如图2所示:(图二运行)5.2)测试方法:007步长很大,以至于可以直接跳出,例如:431007不可能逃出去的情况(根本就没有鳄鱼),例如:一般情况的例子,例如:4 1017 027 037

7、045 01020 30 1最短路径有多条,只需要输出任意一种即可,例如:25 108 89 910 1011 1112 1213 1314 1415 1516 1618 1820 2023 2325 2527 2728 2829 2931 3133 3335 3538 3841 4144 4446 4647 4749 49 输出结果:7input.txt文件中,名称不正确、空文件、缺少部分输入等不规范情况,例如:5 10-25 3030 30注:缺少鳄鱼点(应有5个鳄鱼点)和文件结尾符(-1)。下面给出一个较复杂的测试用例和期望输出结果。65 108 109 811 1011 1416 13

8、18 1514 1815 2216 2316 3018 3523 23 25 3728 4029 22(转右行)35 1840 1524 48-49 -19-40 -18-44 -10-39 -5-38 0-32 5-32 0-28 11-25 7-18 0-17 -2-19 3-12 0-10 -10-13 -1318 -2520 -4811 -22-29 18-40 40-40 -4040 -4049 -4935 -3727 -3022 -2214 -228 -1010 -18-23 29-20 20-21 23-18 19-10 15-10期望输出结果:5.3)测试:在input输入测试

9、数据,如图3所示:(图3 输入测试数据)5.4)测试的结果:在output查看测试结果,如图4所示:(图4 测试结果)6、小 结经过这次的课程设计,我很深刻的意识到自己的编程能力还有待提高,发现自己还存在很多不会的问题,有些细节问题没有注意到,还得学会冷静思考,加强算法和C语言语法的学习。其中对英语的要求也体现出来了,因为它说明错误的时候都是英语,遇到问题要及时去查相关的资料。反复的调试程序,最好是多找几个同学来对你的程序进行调试并听他说对你的程序的建议。要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。另外,得注意符号的使用,注意对字

10、符的处理,特别是对指针的使用时很容易出错且调试过程不会报错,但最后的结果却不是你想要的。程序在完成之后,当时你调试运行时没有错误,可能错误就恰好隐藏在你没有检查的地方,要更全面的检查,特别是几个选择合起来一起挨个执行一遍。通过进一周的学习实训和课程设计,又一次体验了离开课堂的理论学习,做了一次真正实践与理论相结合的连接。特别是所做的题目基本都不是课堂上所讲的例子,但却是每一步都是用到课堂的内容。实训让我对懂得的知识做了进一步深入了解,让我对其的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解,也形成了一定的个人编程风格。在这次的课程设计中,学到了许多新的知识,比如还知道了除了标准库

11、外其他函数的用法,知道程序的框架对于写一个完整的程序来说是很重要的,写出了大体框架就等于完成了一半程序,但不管怎么样,继续努力也是必不可少的。7、参考文献【1】数据结构课程设计 何钦铭 冯雁 陈越 著 浙江大学出版社 2015-2【2】数据结构(C语言版) 严蔚敏 吴伟民 著 清华大学出版社 2011-118、源程序清单#include Graph.hDeque.herror.h#include stdio.h/*读入一个case返回一个Graph,*Bank 记录最短到达河岸的路径*/Graph read_case(FILE *InFile, int num, Vertex* Bank, D

12、eque D) Graph G = NULL; int x, y; int i, Times; fscanf(InFile, %lf, & if(CheckForEnd(0, 0, JamesJump + ISLAND_DIAMETER/2.0) for(i = 0; i (num 0) /* 007必须经过鳄鱼头上的情况 */ num += 2; G = GraphNew(num); for(i = 2; num; i+) /* 第三个node开始是鳄鱼 */ y); Gi.X = x; Gi.Y = y; if(CheckForStart(x, y, JamesJump) /*判断是否能跳

13、上该点*/ Gi.Path = 1; /*007可以跳到 */ Gi.Step = 1; /* 一步 */ if(CheckForEnd(x, y, JamesJump) /* 判断该点是否能跳出 */ *Bank = i; /* 007可以跳出 */ Times = (num - i - 1) GV.Step + 1) & CheckForConnect(G, V, i, JamesJump) Gi.Path = V; Gi.Step = GV.Step + 1; if(Gi.Step G*Bank.Step) & CheckForEnd(Gi.X, Gi.Y, JamesJump) *Ba

14、nk = i; else Inject(i, D);/*写出结果,即最短路径*/void write_result(FILE *OutFile, Vertex Bank, Graph G, Deque D) unsigned int Times, i; switch(Bank) case 0: /* 007无法跳出 */ fprintf(OutFile, %dn, -1); break; case 1: /* 007可以直接跳出 */, 1); default: Times = GBank.Step + 1; /* 跳的步数 */ while(Bank != 1) /* 跟踪路径 */ Pus

15、h(Bank, D); Bank = GBank.Path;, Times); /* 输出 */ for(i = 1; i+) fprintf(OutFile, %d , GV.X);, GV.Y); int main(int argc, char *argv) FILE *in, *out; Deque D; int VertexNum; Vertex Bank = 0; in = fopen(input.txt, r); if(NULL = in) fprintf(stderr, Can not open input.txt exit(-1); out = fopen(output.txtw if(NULL = out)Can not open output.txt fclose(in); D = DequeNew(); while(EOF != fscanf(in, VertexNum) & (0 = VertexNum) G = read_case(in, VertexNum, &Bank, D); /* 读文件直到结尾 */ write_result(out, Bank, G, D); if(G) GraphDelete(G); fclose(in); fclose(out); DequeDelete(D); return 0;

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

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