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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

迷宫课程设计报告Word格式文档下载.docx

1、对计算机了解的深度,不同领域、不同岗位上的工作人员有不同的要求。学习计算机程序设计主要就是要应用于现实社会生活中。应用程序设计使我们更好的管理生活,提高自己的生活水平。关键词:栈 队列 二维数组 哈夫曼树 哈夫曼编码 二叉树目 录摘 要 II第1章 绪论 11.1 课程设计选题的目的 112 课程设计选题的背景和意义 11.3 课题研究的主要内容 2第2章 系统需求分析 321输入/输出形式和输出值的范围 322 程序功能 42.3测试数据 4第3章 概要设计 73.1设计思想 73.2实现方法 73.3函数间的关系 7第4章 详细设计 84.1实现定义的数据类型 84.2实现定义操作伪代码算

2、法 8第5章 问题描述及解决方案 105.1问题描述 105.2问题的解决方案 10第6章 测试并列出测试结果 10第7章 总 结 147.1设计体会 147.2结束语 14致 谢 15参考文献 16附 录 17(1)迷宫问题 17(2)哈弗曼编码与译码 21第1章 绪论随着信息产业的飞速发展,信息化管理已经引入并应用到各行业管理领域,各种形式的百货商场、大型仓储超市、便利店、连锁超市和专卖店等形式的零售业鳞次栉比,不断改变、影响着人们的价值观念和生活方式。因此,要提升企业竞争力,就要大力推进企业信息化建设,利用先进的办公自动化系统来实现企业内部信息管理、共享及交流,才能使企业在竞争激烈的21

3、世纪取得先机。1.1 课程设计选题的目的为大家解决一些生活中实际的问题,在这个过程中,编程人员自身的能力也在不断地提高。此次程序设计综合运用所学知识解决实际问题,将课堂的书本知识有效的在程序中体现出来,让学生更理解了C+功能之强大,进一步让学生对面向对象的方法以及C+的编程思想有了较好了解和认识。此外,此次设计培养独立开发、设计、调试、运行程序的能力,激发了学生较强的自学兴趣,锻炼学生之间以及学生与老师的交通能力,培养学生合作精神,让学生更好的认识到合作的重要性,使学生在今后的学习中加强对合作精神的培养。12 课程设计选题的背景和意义121 课程设计的背景(1)迷宫问题儿童智力游戏的一种,同时

4、也锻炼人的思维能力。当我们在一个迷宫中时怎样避免重复的走一些路,避免怎样走投无路,无路可走,什么样的迷宫可走,怎样就知道迷宫无出口了,通过回溯法帮我们解答,动脑子想办法,看看计算机是怎么实现以最快的方式走出你设的迷宫的。(2)哈夫曼编码/译码实现在数据通信中,经常需要将传送的文字转换成由二进制字符0、1组成的二进制串,称之为编码。在传送电文时,人们总希望传送时间尽可能短,这就要求电文代码尽可能短。让出现频率高的(或权值大的)字符采用尽可能短的编码,出现频率低的字符采用稍长的编码,构造一种不等长编码。哈弗曼树可用于构造使电文的编码总长最短的编码方案,利用其进行编码及译码能够是问题得以以最好方案解

5、决。122 课程设计的意义一般来说,课程设计要比教学实验复杂一些,涉及的深度深,而且更加实用些。其目的是通过课程设计的综合训练,培养学生分析解决实际问题和编程等动手能力,最终目标是想通过这种形式,帮助同学系统掌握C+这门课程的主要内容,使老师更好的完成教学任务。结合实际应用的要求,使课程设计既覆盖教学所要求的知识点,又接近工程的实际需要,训练自己实际分析问题和解决问题以及编程的能力。通过详细的实例分析,循环渐进的描述,启发学生顺利的完成设计。课程设计将设计要求、需求分析、算法设计、编程和实例测试运行分开,为学生创造分析问题、独立思考的条件。只要学生在吃透要求和算法的前提下,完全可以不按书中提示

6、的参考程序,自己设计出更具有特色的程序。1.3 课题研究的主要内容1)迷宫问题要求完成构造迷宫,输入入口出口,输出迷宫路径。功能要求如下:1构建迷宫:可以系统构建,也可以用户自己构建,输入1为不通,输入0为通路。显示构建好的迷宫。2输出路径:输入入口与出口,利用编好的函数对迷宫进行试探,有路径输出路径,无路径提示用户此迷宫无出口。3最短路径:输出走出此迷宫的最短路径,即不用走回头路的一条路径。4要求系统有一定的容错性,给用户必要的提示。2)哈夫曼编码/译码实现要求完成发送端对待传送数据的编码和接收端对传送来的数据的译码。1接收原始数据:从终端输入字符集大小为n,即n个字符和n个权值,建立哈夫曼

7、树。2编码:利用已建立好的哈夫曼树对输入的原文进行编码,结果存入code1file.dat文件中,同时输出到屏幕。3译码:利用已编码的对译文(codefile.dat中的文本)进行译码,结果存入code2file.dat文件中,同时输出到屏幕。4打印编码规则:即字符与编码的一一对应关系5打印哈夫曼树:将建立的哈夫曼树用某种树的存储方式存储后输出。第2章 系统需求分析21输入/输出形式和输出值的范围2.1.1输入/输出形式的范围(1)迷宫中建立数组时,首先输入迷宫的行数和列数。边围规定为1,在程序中已赋值,内围用0、1输入,不用其他的数字,若输入错误会提示重新输入;然后选择系统创建的迷宫还是自己

8、创建迷宫,输入选项1或2(输入其他选项按2处理);迷宫创建好后,输入入口和出口坐标(入口必须为通路即0,否则系统会报错,重新输入),找到路径或无路径;接下来会提示寻找其他路径还是退出次迷宫,输入1或2进行选择;选择1,则继续输入迷宫入口和出口,选择2或其他,则退出。若还想创建别的迷宫就在接下来输入y或Y,输入其他则退出程序。(2)在哈夫曼编码/译码实现程序中,先输入结点个数,然后根据提示分别输入五个字符(若输入数字,按字符处理),系统会根据系统的功能自动生成输入字符的哈弗曼码。以上内容会存入文件里,若创建二叉树存储,则可再接下来的提示下输入y或Y,其他输入代表不创建;若存储则显示二叉树中序遍历

9、的结果,接下来要求输入一串字符串,对其进行编码,要求输入已被编码的字符,若超出范围则提示该字符输入有误;若想继续编码则再下面的提示下选择y或Y,直至不选进入下一项译码过程,输入0、1码,若输入其他数字或0、1码不匹配则显示0、1码输入有误,会请重新输入,输入正确会保存到相应文件里;若继续译码选y或Y,直至不选则退出这一层;若想继续体验编码译码在接下来选择y或Y,重复上面的过程,输入其他退出程序。2.1.2输出值的范围(1)在迷宫设计中若输入出口超出迷宫大小,即为无路径;输出无限制。(2)在哈夫曼编码/译码实现程序中,哈弗曼编码长度MAXBIT设为了12,字符个数,编码个数MAXNODE设为了1

10、5。22 程序功能在迷宫问题中,可由操作者自己设定迷宫大小,迷宫内部构造有两个选择,系统设计,节省时间,也可由操作者自己设计,自己迷宫入口和出口并能保证入口为通路,若有路径会显示其路径并显示最短路径。一个迷宫有不同入口和出口,可寻求多条路径。对输入字符按其ASC码进行编码,并保存至文件,可创建二叉树存储,并对其进行中序遍历,输入已编码字符能够对其进行编码,输入相应0、1码能够将其译成字符。输入字符不能为重复的,若为重复的可判别出,提示输入不同字符。2.3测试数据2.3.1正确的输入及输出结果第3章 概要设计3.1设计思想(1)迷宫中用回溯法从八个方向向前试探,用队列保存探测到的通路,建立一个数

11、组模拟迷宫,将各个函数结合在一起。(2)哈弗曼编码中先按字符权重大小排序在建立哈弗曼树,进而完成编码;译码时,将编好的编码与字符由文件传到两个字符串中,进而译码。3.2实现方法(1)迷宫中定义move数组,从东顺时针探测;进队出队完成探测;自己创建maze数组,并输入入口点和出口点,再进行计算。(2)哈弗曼编码中,将用户输入字符存入声明好的结构变量数组HuffNode中,在进入排序函数,建立好哈弗曼树,进而编码;译码时定义string 类型的变量s1,s2 ,字符存入s1中,编码存入s2中,进入进行译码。3.3函数间的关系(2)哈弗曼编码与译码第4章 详细设计4.1实现定义的数据类型 (1)迷

12、宫数组定义为结构体包含两个整型数据,迷宫出口和入口的值定义为整型。(2)迷宫内部的设计时各坐标点设置成栈内整型。(3)迷宫中求最短路径时定义结构体类型表示队列,包含整型坐标点,和整型下标;又有整型的队首尾指针。(4)哈弗曼树定义成结构体类型,包含1个字符型变量表示字符也表示权重和3个整型变量分别表示双亲,左孩子,右孩子。(5)哈弗曼编码定义为结构体类型,包含存放编码的整型数组和编码的起始位置。(6)二叉树定义为结构体类型包含字符串类型的结点信息,和二叉树指针类型的左孩子右孩子。4.2实现定义操作伪代码算法求一般路径伪代码:while(栈不空)栈顶元素=(x,y,d)出栈;求出下一个要试探的方向

13、d+;while(还有剩余试探方向)if(d方向可走)(x,y,d)入栈;求新点坐标(i,j);将新点(i,j)切换成当前点(x,y);if(x,y)=(m,n)结束;else 重置 d=0;else d+;求解最短路径伪代码:(x,y)入队;while(队列不为空)队首元素出队;for(方向为0;方向总方向数;改变方向)到达点坐标;if(此坐标点为通路)入队;if(到达出口点)输出路径;恢复迷宫;当前点搜索完,取下一点搜索;编码伪代码: for(i=0;i=0;i-) /从最后一个字符开始i=k t=1; /标记; while(t!=-1) /若找不到t=-1; t=s.find(s2i);

14、 /t记录s2字符串中第一个字符的在s中的下标 if(t!=-1) str.replace(t,s2i.length(),s1i);/用权值替换相应的0、1码 s.replace(t,s2i.length(), /用*替换每个0、1码串 第5章 问题描述及解决方案5.1问题描述(1)迷宫问题,方向设置,路径存储,迷宫图的存储,路径的求解,出口入口的设置。(2)哈弗曼编码译码中,哈弗曼树的建立,二叉树存储的实现,编码译码的实现。5.2问题的解决方案(1)迷宫问题中,采用move数组存储方向,采用二维数组存储迷宫图,采用栈存储路径,采用队列算出最短路径,参数传递出口入口和迷宫的大小。(2)哈弗曼编

15、码译码中,用静态链表建立哈弗曼树,利用哈弗曼树进行编码,用字符串之间的互换进行译码。并以静态链表为基础,建立二叉树存储,并中序遍历。第6章 测试并列出测试结果(2)哈弗曼编码/译码第7章 总 结7.1设计体会7.1.1系统的优点(1)迷宫问题中,突出优点为采用了时间随机函数,系统自动生成迷宫,节约用户时间。此外,用两种不同的存储方式(栈和队列)对迷宫进行探究。界面清晰、通俗易懂、操作简便、结构严谨、逻辑习惯强。(2)哈弗曼编码译码,可多次对不同字符集进行编码译码,并有一定的容错能力。7.1.2本系统的不足(1)对于迷宫问题,输入迷宫内部结构时,输入形式为0、1空格或回车,输入形式有误时,会使程

16、序无法运行下去,有时还会进入死循环。输入入口坐标时,没有容错,若大于迷宫规模,程序会出错。(2)哈弗曼编码和译码中,没有明确的菜单,只能按程序一直进行下去,直至退出再开始,即编码完后进入译码状态就无法再返回进行编码了,这一点有待改进。7.1.3可改进的地方(1)各个菜单界面可以设计的更为美观,更简洁易懂。(2)可以从各个方面考虑设置容错机制使程序更健壮。7.2结束语课设中感受到自己知识的匮乏,需要学习的东西很多,不能总是局限于书本,在课设期间养成了经常去图书馆查阅的习惯,这个习惯应该继续保持下去,此外,当出现问题时,应该及时与周围同学交流,多交流才能使学到的东西更深入到心里,总之,这是一次不错

17、的锻炼,专业水平不说能提高什么,但在过程中学到的学习方法应该是能受益终生的!致 谢在心里总是想感谢几个人。在课设过程中,由于自己时间安排不当与专业基础知识的不扎实,课程设计的时间总是感觉不够,在课设中也遇到了很多困难,好多时候都想止步不前,但因为有身边的这群人,助我度过难关,有的鼓励我,有的引导我,我也渐渐放平心境,学会怎么去思考,怎么去解决遇到的问题,怎么让程序运行起来,其实我们都是学生,但是他们比我做的好,我应该向他们学习的,学习面对困难的态度与理智,学习坚韧的品行两周课设结束了,但感觉收获了很多,不仅仅是任务完成了,更让我了解到身边这群值得我珍惜的朋友是多么的难得。这仅仅是一个小小的课设

18、其实,以后还要面对各种各样的更大的困难与逆境,只要坚持,找到正确的方法,相信一切都会克服的。参考文献1 周霭如,林伟健 C+程序设计基础 北京:电子工业出版社2Mark Allen Weiss数据结构与算法分析C+描述北京:人民邮电出版社,2007.13严蔚敏,吴伟民数据结构:C语言版北京:清华大学出版社,19974 耿国华数据结构北京:高等教育出版社,20055 姚伯元课程设计(论文)规范化管理与培养学生综合素质中国高等教育网教学研究,2005-2-26 朱明方,吴及数据结构教程北京:机械工业出版社,2007.1附 录123.h#includestackstdio.htime.hstring

19、using namespace std;typedef struct int x,y;item; int x,y,d;Datetype;typedef stack stack_int;void path (int *maze,int,int,int,int);void printpath();操作.cpp#include123.h#define NUM 100 /队列大小;typedef struct /所到点的坐标; int pre; /前驱点的下标;SqType; /队列;int front,rear; /队首指针与队尾指针;void printpath(SqType sq,int)/打印

20、路径 int i; i=rear; do cout(sqi.x,sqi.y)-; i=sqi.pre; /回溯; while(i!=-1);void restore(int *maze,int m,int n)/恢复迷宫 for(int i=1;=m;i+) for(int j=1;j=n;j+) if(mazeij=-1) mazeij=0;int path1(int *maze,int m,int n,int c,int d,int x1,int y1)/最短路径 /m,n为迷宫的长和宽,c,d为迷宫入口坐标,x1,y1为迷宫出口坐标;maze为迷宫; item move8=0,1,1,1

21、,1,0,1,-1,0,-1,-1,-1,-1,0,-1,1; /坐标增量数组; SqType sqNUM; int x,y,i,j,v; front=rear=0; sq0.x=c; sq0.y=d; sq0.pre=-1; if(mazecd=0) mazecd=-1;/入口点入队; else goto G; while(front=rear) /队列不为空 x=sqfront.x; y=sqfront.y; for(v=0;v8;v+) i=x+movev.x; j=y+movev.y; if(mazeij=0) rear+; sqrear.x=i; sqrear.y=j; sqrear

22、.pre=front; mazeij=-1; /访问过的坐标点,入队; if(i=x1&j=y1) cout最短路径为:endl; printpath(sq,rear); /输出路径; restore(maze,m,n); /恢复迷宫; return 1; /for v; front+; /当前点搜索完,取下一个点搜索 /whileG:cout无路径。 return 0;void path(int *maze,int a,int b,int m,int n) stack_int st; Datetype temp; int x,y,d,i,j; if(mazeab=1)cout进口输入有误。r

23、eturn; temp.x=a;temp.y=b;temp.d=-1; /初始化入口点坐标及方向; st.push(temp); while(!st.empty() temp=st.top(); st.pop(); x=temp.x;y=temp.y;d=temp.d+1; while(d8) i=x+moved.x;j=y+moved.y; if(mazeij=0) /该点可到达; temp.x=x;temp.y=y;temp.d=d; /坐标及方向; st.push(temp); /坐标及方向入栈; x=i;y=j; mazexy=-1;/到达新点; if(x=m & y=n) cout 迷宫路径为:mn- Datetype t; while(! t=st.top(); coutt.xt.y st.pop(); /输出路径; return ; /到达出口; else d=0; /重新初始化方向; else d+; /改变方向; cout对不起,无法找到出口. return; /

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2