ImageVerifierCode 换一换
格式:DOC , 页数:24 ,大小:255.50KB ,
资源ID:2522950      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(数据结构课程设计迷宫问题.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构课程设计迷宫问题.doc

1、 数据结构课程设计课程名称:数据结构 题 目:迷宫设计系 别:软件学院专 业:移动设备应用开发班 级:15级移动1班 姓 名: 学 期:2016-2017第一学期 指导教师:时 间:2016年12月 目录第一部分 需求分析第二部分 详细设计第三部分 调试分析第四部分 用户手册第五部分 测试结果第六部分 附录第七部分 参考文献一、 需求分析 1、对于给定的一个迷宫,给出一个出口和入口,找一条从入口到出口的通路,并把这条通路显示出来;如果没有找到这样的通路给出没有这样通路的信息。2、可以用一个mn的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出

2、口的通路,或得出没有通路的结论。3、编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。4、手动设置迷宫是任意给定的,所以程序要能够对给定的迷宫生成对应的矩阵表示,所以程序的输入包括了矩阵的行数、列数、迷宫内墙的个数、迷宫内墙的坐标、所求的通路的入口坐标、出口坐标。5、自动生成的迷宫原理很简单,因为0和1分别代表通道和障碍物,所以只需要随机生成0和1然后再给最外围都赋值为1,就形成了新的迷宫。二、详细设计 1、计算机解迷宫通常用的是“穷举求解“方法,即从人口出发,顺着某一个方向进行探索,若能走通,则继续往前进

3、;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。2、如果在某个位置上四个方向都走不通的话,就退回到前一个位置,换一个方向再试,如果这个位置已经没有方向可试了就再退一步,如果所有已经走过的位置的四个方向都试探过了,一直退到起始点都没有走通,那就说明这个迷宫根本不通。3、所谓走不通不单是指遇到墙挡路,还有已经走过的路不能重复走第二

4、次,它包括曾经走过而没有走通的路。显然为了保证在任何位置上都能沿原路退回,需要用一个后进先出的结构即栈来保存从入口到当前位置的路径。并且在走出出口之后,栈中保存的正是一条从入口到出口的路径。4、若当前位置“可通”,则纳入“当前路径”,并继续朝“下一位置”探索;若当前位置“不可通”,则应顺着“来的方向”退回到“前一通道块”,然后朝着除“来向”之外的其他方向继续探索;若该通道块的四周四个方块均“不可通”,则应从“当前路径”上删除该通道块。所谓“下一位置”指的是“当前位置”四周四个方向(东、南、西、北)上相邻的方块。假设以栈S记录“当前路径”,则栈顶中存放的是“当前路径上最后一个通道块”。由此,“纳

5、入路径”的操作即为“当前位置入栈”;“从当前路径上删除前一通道块”的操作即为“出栈”。5、找通路的程序的关键部分可以表示如下:do 若当前位置可通, 则将当前位置插入栈顶; / 纳入路径 若该位置是出口位置,则算法结束; / 此时栈中存放的是一条从入口位置到出口位置的路径否则切换当前位置的东邻方块为新的当前位置; 否则若栈不空且栈顶位置尚有其他方向未被探索, 则设定新的当前位置为: 沿顺时针方向旋转找到的栈顶位置的下一相邻块; 若栈不空但栈顶位置的四周均不可通, 则 删去栈顶位置; / 从路径中删去该通道块若栈不空,则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至栈空; while

6、(栈不空); 6、程序中用的数据结构解析: 程序中用了顺序栈保存当前找到的路径,当前位置不可通时,可以出栈,退回到前一个位置再继续探索通路,栈的定义如下:struct SqStack SElemType *base; / 在栈构造之前和销毁之后,base的值为NULL SElemType *top; / 栈顶指针 int stacksize; / 当前已分配的存储空间,以元素为单位; / 顺序栈 栈中元素的类型结构程序中先定义了一个表示坐标的类型结构:struct PosType / 迷宫坐标位置类型 int x; / 行值 int y; / 列值 ;栈中元素的类型结构如下:struct SE

7、lemType / 栈的元素类型 int ord; / 通道块在路径上的序号 PosType seat; / 通道块在迷宫中的坐标位置 int di; / 从此通道块走向下一通道块的方向(03表示东北) ;7、主函数的流程图输出从起点到终点的坐标显示当前含有通路的迷宫结构输出没有这样的通路输入所求通路的起点终点坐标显示当前的迷宫的结构设置内墙设置外墙输入迷宫的行数列数(包括外墙) 手动设置自动生成自动生成迷宫不需要进行设置内墙一步,其他都一样。三、 调试分析1、对于程序的设计由简单到复杂,先设计一个整体的轮廓然后再慢慢的增加程序的功能,这样能够有效的减少错误,功能慢慢的增加,在前一步的程序运行

8、通过之后再继续增加功能,这样在检查错误的时候比较有目的性,提高写程序的效率。2、对于程序中的错误,如果遇到说变量没有定义或者数据结构没定义的错误,可能是由于你在定义这种数据结构的变量时数据结构还没有定义,也就是说在定义此数据结构的变量的语句要放在声明这种结构体之后。3、在写程序时要注意printf和scanf语句的格式,格式不对会得不到你想要的结果。4、写程序时一定要瞻前顾后,前后一致,包括名称、数据类型等等。四、用户手册在使用程序时严格按照程序给出的提示一步一步来,下面给出程序正常执行的步骤:1、程序会提示“请输入迷宫的行数,列数(包括外墙):”,这时就需要输入表示迷宫的二维数组的行数和列数

9、,需要注意的是由于我们在迷宫周围加了一道墙,所以要输入的行列数要比实际表示迷宫的行列数多两行两列。2、程序提示“请输入迷宫内墙单元数:”,此时需要输入迷宫中墙的数目。3、程序提示“请依次输入迷宫内墙每个单元的行数,列数:”,此时要输入迷宫中所有墙的坐标,我们用数组中的一个元素来表示墙。4、在输入了迷宫所有内墙的坐标后,程序会显示出迷宫的结构,然后程序会提示“请输入起点的行数,列数:”,此时需要输入所求通路的起点坐标。5、程序提示“请输入终点的行数,列数:”,此时需要输入所求通路的终点的坐标。6、终点坐标输入完毕之后,程序会显示出两种运行的结果,一种是输出了迷宫的结构,此时迷宫中已包含了所找的通

10、路,用连续的数字表示出了通路在迷宫中是如何走的,此时迷宫中的-1表示找通路时走过的单元但是通路不通。注意:再输入内墙单元的坐标是一定要细心,不要错输,也不要漏输。否则程序会出错。五、测试结果迷宫的测试数据如下:左上角(1,1)为入口,右下角(9,8)为出口。 1 2 3 4 5 6 7 8001000100010001000001101011100100001000001000101011110011100010111000000程序的测试结果为:1、 程序的开始界面六、附录(附有完整的源程序)源程序如下:#include #include #define TRUE 1#define FALS

11、E 0#define OK 1#define ERROR 0#define OVERFLOW -2#define STACKINCREMENT 10#define STACK_INIT_SIZE 100/初始长度 typedef int Status;struct PosType / 坐标竖直为x,横为y int x; int y; ; struct SElemType int ord; /序号1,2,3,4,5,6.路径的序号 PosType seat; /坐标 int di; /移动方向:上下左右 ; struct SqStackSElemType *base;SElemType *top

12、;int stacksize;SqStack S; #define MAXLENGTH 30 typedef int MazeTypeMAXLENGTHMAXLENGTH; / 将数组做成地图。 MazeType m; / 宏定义,定义一个数组地图 int curstep=2; / curstep代表的是足迹,走过的路 Status InitStack(SqStack &S)S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType);/开空间,栈底是表头 if(!S.base) exit(OVERFLOW);/检查是否开辟成功 S

13、.top=S.base;/设为空栈 S.stacksize=STACK_INIT_SIZE;/设置长度 return OK;Status Pop(SqStack &S,SElemType &e)/得到栈顶元素 if(S.base=S.top) return ERROR;/检查是否为空栈 ,若为空则没有栈顶e=*-S.top; /栈的特殊存储方式 return OK; Status StackEmpty(SqStack &S)/判断是否为空 if(!S.base) return ERROR;if(S.base=S.top) return TRUE;/为空 else return FALSE;St

14、atus Push(SqStack &S,SElemType e)/进栈 if(S.top-S.base=S.stacksize)/栈不满 S.base=(SElemType *) realloc (S.base,(S.stacksize+STACKINCREMENT) * sizeof(SElemType);/开空间 if(!S.base) exit(OVERFLOW);/检查是否开空间成功 S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;*S.top+=e;/压进栈里面 return OK;Status Pass(PosType a

15、)/传参传的是当前位置的坐标 /检查当前位置是墙还是通道 if(ma.xa.y=0)return OK;elsereturn ERROR;Status FootPrint(PosType a)/对已经走过的路做成标记 1,2,3,4.。 ma.xa.y=curstep;PosType NextPos(PosType c,int di)/0-3上下左右 /作用是移动一个位置,所以需要传进来位置,移动方向,毕竟位移量已经确定为1 PosType direc4=-1,0,1,0,0,-1,0,1;/上下左右 c.x+=direcdi.x; c.y+=direcdi.y; return c;void

16、MarkPrint(PosType a)/走不通 ma.xa.y=-1;/此路不通 void Print(int x,int y) /迷宫的输出 int i,j; for(i=0;ix;i+) for(j=0;jy;j+) if(mij=1) printf(); elseprintf(匚); printf(n); void Print1(int x,int y)/有通路的迷宫的输出 int i,j; for(i=0;ix;i+) for(j=0;j=2)printf(); printf(n); Status MazePath(PosType start,PosType end)/找通路 Ini

17、tStack(S);/保存可以走的路径 SElemType e; PosType curpos=start;/curpos是指当前位置,将开始位置设为当前位置 do if(Pass(curpos)/如果当前位置的序号为0,即此位置不是迷宫中的墙 即为能走的路。 FootPrint(curpos);/留下标记e.ord=curstep; /输出的时候的1,2,3,4,5 e.seat.x=curpos.x; e.seat.y=curpos.y;/将当前位置信息存入e中 e.di=0; Push(S,e);/将这一步记录,压进栈中curstep+; /再走一步 和ord一个性质,路径的步数 if(

18、curpos.x=end.x&curpos.y=end.y) return TRUE;/如果已经是出口就完成栈的记录 curpos=NextPos(curpos,e.di);/否则就 走一步 else/如果当前位置是走过得 意思就是它的 序号不是0 if(!StackEmpty(S)/判断栈是不是空,不是空就后退到上一步 Pop(S,e);/后退到上一步 curstep-; while(e.di=3&!StackEmpty(S)/ 后退直到 找到能走的路 MarkPrint(e.seat); Pop(S,e); curstep-; if(e.di3)/03代表上下左右 e.di+; Push(

19、S,e); curstep+; curpos=NextPos(e.seat,e.di);/下一步怎么移动 while(!StackEmpty(S); return FALSE;void Auto_maze(int x,int y) int i,j; printf(n迷宫生成中nn); system(pause); for(i=0;ix;i+) for(j=0;jy;j+) mij=rand()%2;void GenerateMaze(int x,int y)/生成迷宫地图 int i,j;int x1,y1;/障碍物坐标 for(i=0;iy;i+)m0i=1;mx-1i=1;for(j=0;

20、jx;j+)mj0=1;mjy-1=1;for(i=1;ix-1;i+)for(j=1;jy-1;j+)mij=0;printf(输入迷宫里面阻碍物的个数:);scanf(%d,&j);printf(请输入迷宫中障碍物坐标:n);for(i=0;ij;i+)scanf(%d%d,&x1,&y1);mx1y1=1;printf(*迷宫图*n); Print(x,y); printf(*迷宫图*n);void Movingdirection(SElemType a)/用来显示迷宫通路怎么走的 switch(a.di)case 0:printf(%d%3d n,a.seat.x,a.seat.y);

21、break;case 1:printf(%d%3d n,a.seat.x,a.seat.y);break;case 2:printf(%d%3d n,a.seat.x,a.seat.y);break;case 3:printf(%d%3d n,a.seat.x,a.seat.y);break;void MazePathway(PosType begin,PosType end,int x,int y)/显示迷宫通路图 SElemType a; SqStack T; InitStack(T); if(MazePath(begin,end) printf(迷宫通路如下图所示:n); Print1(

22、x,y); while(!StackEmpty(S) Pop(S,a); Push(T,a); printf(找到的路径用坐标表示如下:n); while(!StackEmpty(T) Pop(T,a); Movingdirection(a); else printf(迷宫中没有出路。n); int main() PosType begin,end; int x,y; int n; int i,j; while(1) printf(*1.手动输入。*n); printf(*2.自动生成。*n); printf(*3.退 出。*n); printf(请输入:); scanf(%d,&n); sy

23、stem(CLS); switch(n) case 1: printf(请输入迷宫的宽和长:); scanf(%d%d,&x,&y); GenerateMaze(x,y); printf(请输入起点的坐标:); scanf(%d%d,&begin.x,&begin.y); printf(请输入终点的坐标:); scanf(%d%d,&end.x,&end.y); MazePathway(begin,end,x,y); break; case 2: printf(请输入迷宫的宽和长:); scanf(%d%d,&x,&y); Auto_maze(x,y); for(i=0;iy;i+)m0i=1

24、;mx-1i=1;for(j=0;jx;j+)mj0=1;mjy-1=1; Print(x,y); printf(请输入起点的坐标:); scanf(%d%d,&begin.x,&begin.y); printf(请输入终点的坐标:); scanf(%d%d,&end.x,&end.y); MazePathway(begin,end,x,y); break; case 3: exit(-1); return 0;七、参考文献1、数据结构(C语言版) 严蔚敏 吴伟民 编著 清华大学出版社2、讲课所用课件等等目 录第一章 总 论1一、项目提要1二、可行性研究报告编制依据2三、综合评价和论证结论3四

25、、存在问题与建议4第二章 项目背景及必要性5一、项目建设背景5二、项目区农业产业化经营发展现状11三、项目建设的必要性及目的意义12第三章 建设条件15一、项目区概况15二、项目实施的有利条件17第四章 建设单位基本情况19一、建设单位概况19二、研发能力20三、财务状况20第五章 市场分析与销售方案21一、市场分析21二、产品生产及销售方案22三、销售策略及营销模式22四、销售队伍和销售网络建设23第六章 项目建设方案24一、建设任务和规模24二、项目规划和布局24三、生产技术方案与工艺流程25四、项目建设标准和具体建设内容26五、项目实施进度安排27第七章 投资估算和资金筹措28一、投资估算依据28二、项目建设投资估算28三、资金来源29四、年度投资与资金偿还计划29第八章 财务评价30一、财务评价的原则30二、主要参数的选择30三、财务估算31四、盈利能力分析32五、不确定性分析33六、财务评价结论34第九章 环境影响评价35一、环境影响35二、环境保护与治理措施35三、环保部门意见36第十章 农业产业化经营与农民增收效果评价37一、产业化经营37二、农民增收38三、其它社会影响38第十一章 项目组织与管理40一、组织机构与职能划分40二、项目经营管理模式42三、技术培训42四、劳动保护与安全卫生43第十二章 可行性研究结论与建议46一、可行性研究结论46二、建议47

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服