




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
院系计算机科学技术学院班级软件111班姓名李慧玲学号20111702010114指导教师薛京丽2012年12月24日程序设计基础课程设计任务书一、题目迷宫二、设计要求1自己制定工作计划。2分时间按规定工作量敲好代码,认真理解,熟练运用。3数据必须存盘,数据量必须足够多,并采用真是数据。三、课程设计工作计划2012年12月19上午由薛京丽指导教师讲课,学生准备文献资料;2012年12月19下午日各设计小组进行总体方案设计和任务分工;2012年12月20日下午2012年12月28日完成自己承担的程序模块并通过独立编译。2012年12月26日,验收,学生撰写课程设计报告。指导教师签字程序设计基础课程设计指导教师评语指导教师评语表现成绩验收成绩报告成绩总成绩指导教师签字2013年1月日目录目录11程序的功能设计12程序的数据设计221概要设计2211节点类型和指针类型23程序的函数设计331迷宫操作432菜单选择64函数编程及调试85整体调试126总结19参考文献201需求分析11设计任务以一个MN的长方阵表示迷宫,0和1分别表示迷宫中的道路和障碍,设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。12任务分析1建立迷宫迷宫中存在通路和障碍,为了方便迷宫的创建,可用0表示通路,用1表示障碍,这样迷宫就可以用0、1矩阵来描述。2存储迷宫迷宫是一个矩形区域,可以使用二维数组表示迷宫,这样迷宫的每一个位置都可以用其行列号来唯一指定,但是二维数组不能动态定义其大小,我们可以考虑先定义一个较大的二维数组MAZEM2N2(注其中M,N分别表示迷宫最大行、列数,本程序M、N的缺省值为39、39,当然,用户也可根据需要,调整其大小),然后用它的前M行N列来存放元素,即可得到一个MN的二维数组,这样0,0表示迷宫入口位置,M1,N1表示迷宫出口位置。3搜索路径首先从迷宫的入口开始,如果该位置就是迷宫出口,则已经找到了一条路径,搜索工作结束。否则搜索其上、下、左、右位置是否是障碍,若不是障碍,就移动到该位置,然后再从该位置开始搜索通往出口的路径;若是障碍就选择另一个相邻的位置,并从它开始搜索路径。为防止搜索重复出现,则将已搜索过的位置标记为2,同时保留搜索痕迹,在考虑进入下一个位置搜索之前,将当前位置保存在一个队列中,如果所有相邻的非障碍位置均被搜索过,且未找到通往出口的路径,则表明不存在从入口到出口的路径。这实现的是广度优先遍历的算法,如果找到路径,则为最短路径。0010110010以矩阵10001为例,来示范一下00100首先,将位置(0,0)(序号0)放入队列中,其前节点为空,从它开始搜索,其标记变为2,由于其只有一个非障碍位置,所以接下来移动到0,1(序号1),其前节点序号为0,标记变为2,然后从0,1移动到1,1(序号2),放入队列中,其前节点序号为1,1,1存在1,2(序号3)、2,1(序号4)两个可移动位置,其前节点序号均为2对于每一个非障碍位置,它的相邻非障碍节点均入队列,且它们的前节点序号均为该位置的序号,所以如果存在路径,则从出口处节点的位置,逆序就可以找到其从出口到入口的通路。如下表所示0123456789100,00,11,11,22,12,21,32,30,33,33,410122345679由此可以看出,得到最短路径3,43,32,32,21,21,10,10,01程序的功能设计1手动2自动3退出SWITCH1,2,3是否为通路123退出结束输入M,N输入M,N手动输入数字迷宫字符迷宫自动生成下左上右迷宫无解迷宫有解输出路径打印通路欢迎界面2程序的数据设计21概要设计构建一个二维数组MAZEM2N2用于存储迷宫矩阵自动或手动生成迷宫,即为二维数组MAZEM2N2赋值构建一个队列用于存储迷宫路径建立迷宫节点STRUCTPOINT,用于存储迷宫中每个节点的访问情况实现搜索算法屏幕上显示操作菜单211节点类型和指针类型迷宫矩阵类型INTMAZEM2N2为方便操作使其为全局变量迷宫中节点类型及队列类型STRUCTPOINTINTROW,COL,PREDECESSORQUE5123程序的函数设计主函数MAIN手动生成迷宫函数SHOUDONG_MAZE自动生成迷宫函数ZIDONG_MAZE将迷宫打印成图形PRINT_MAZE打印迷宫路径若存在路径RESULT_MAZE入队ENQUEUE出队DEQUEUE判断队列是否为空IS_EMPTY访问节点VISIT搜索迷宫路径MGPATH31迷宫操作1手动生成迷宫VOIDSHOUDONG_MAZEINTM,INTN定义I,J为循环变量FORI0且MAZEPROWPCOL10,说明未到迷宫左边界,且其左方有通路,则VISITPROW,PCOL1,MAZE,将左方节点入队标记已访问如果PROW10且MAZEPROW1PCOL0,说明未到迷宫上边界,且其上方有通路,则VISITPROW,PCOL1,MAZE,将上方节点入队标记已访问访问到出口找到路径即PROWM1且PCOLN1,则逆序将路径标记为3即MAZEPROWPCOL3WHILEPPREDECESSOR1PQUEUEPPREDECESSORMAZEPROWPCOL3最后将路径图形打印出来。32菜单选择WHILECYCLE1手动生成迷宫请按1自动生成迷宫请按2退出请按3SCANF“D“,SWITCHICASE1请输入行列数如果超出预设范围则提示重新输入SHOUDONG_MAZEM,NPRINT_MAZEM,NMGPATHMAZE,M,NIFX0RESULT_MAZEM,NCASE2请输入行列数如果超出预设范围则提示重新输入ZIDONG_MAZEM,NPRINT_MAZEM,NMGPATHMAZE,M,NIFX0RESULT_MAZEM,NCASE3CYCLE1BREAK(注具体源代码见附录。)4函数编程及调试在调试过程中,首先使用的是栈进行存储,但是产生的路径是多条或不是最短路径,所以通过算法比较,改用此算法。1本程序的运行环境为DOS操作系统,执行文件为MIGONG_1EXE。2进入演示程序后即显示文本方式的用户界面3选择相应的菜单,按提示执行程序。程序相关信息程序操作菜单操作提示信息测试结果手动输入迷宫62自动生成迷宫5整体调试INCLUDE“STDLIBH“INCLUDE“STDIOH“DEFINEN39DEFINEM39INTXINTMAZEN2M2STRUCTPOINTINTROW,COL,PREDECESSORQUEUE512INTHEAD0,TAIL0VOIDSHOUDONG_MAZEINTM,INTNINTI,JPRINTF“NN“PRINTF“请按行输入迷宫,0表示通路,1表示障碍NN“FORI0I0IFPROW10IFPROWM1PRINTF“迷宫路径为N“PRINTF“D,DN“,PROW,PCOLMAZEPROWPCOL3WHILEPPREDECESSOR1PQUEUEPPREDECESSORPRINTF“D,DN“,PROW,PCOLMAZEPROWPCOL3ELSEPRINTF“NN“PRINTF“此迷宫无解NN“X0RETURN0VOIDMAININTI,M,N,CYCLE0WHILECYCLE1PRINTF“N“PRINTF“欢迎进入迷宫求解系统N“PRINTF“设计者李慧玲N“PRINTF“N“PRINTF“手动生成迷宫请按1N“PRINTF“自动生成迷宫请按2N“PRINTF“退出请按3NN“PRINTF“N“PRINTF“N“PRINTF“请选择你的操作N“SCANF“D“,SWITCHICASE1PRINTF“N请输入行数“SCANF“D“,PRINTF“N“PRINTF“请输入列数“SCANF“D“,WHILEM39|N39PRINTF“N抱歉,你输入的行列数超出预设范围039,039,请重新输入NN“PRINTF“请输入行数“SCANF“D“,PRINTF“N“PRINTF“请输入列数“SCANF“D“,SHOUDONG_MAZEM,NPRINT_MAZEM,NMGPATHMAZE,M,NIFX0RESULT_MAZEM,NPRINTF“NNPRESSENTERCONTIUEN“GETCHARWHILEGETCHARNBREAKCASE2PRINTF“N请输入行数“SCANF“D“,PRINTF“N“PRINTF“请输入列数“SCANF“D“,WHILEM39|N39PRINTF“N抱歉,你输入的行列数超出预设范围039,039,请重新输入NN“PRINTF“请输入行数“SCANF“D“,PRINTF“N“PRINTF“请输入列数“SCANF“D“,ZIDONG_MAZEM,NPRINT_MAZEM,NMGPATHMAZE,M,NIFX0RESULT_MAZEM,NPRINTF“NNPRESSENTERCONTIUEN“GETCHARWHILEGETCHARNBREAKCASE3CYCLE1BREAKDEFAULTPRINTF“N“PRINTF“你的输入有误N“PRINTF“NPRESSENTERCONTIUEN“GETCHARWHILEGETCHARNBREAK6总结通过这段时间的课程设计,我对计算机的应用,数据结构的作用以及C语言的使用都有了更深的了解。尤其是C语言的进步让我深刻的感受到任何所学的知识都需要实践,没有实践就无法真正理解这些知识以及掌握它们,使其成为自己的财富。在理论学习和上机实践的各个环节中,通过自主学习和请教老师,我收获了不少。当然也遇到不少的问题,也正是因为这些问题引发的思考给我带了收获。从当初不喜欢上机写程序到现在能主动写程序,从当初拿着程序不只如何下手到现在知道如何分析问题,如何用专业知识解决实际问题的转变,我发现无论是专业知识还是动手能力,自己都有很大程度的提高。在这段时间里,我对FOR、WHILE等的循环函数用法更加熟悉,逐渐形成了较好的编程习惯。在老师的指导帮助下,同学们课余时间的讨论中,这些问题都一一得到了解决。在程序的调试能力上,无形中得到了许多的提高。例如头文件的使用,变量和数组的范围问题,定义变量时出现的问题等等。在实际的上机操作过程中,不仅是让我们了解数据结构的理论知识,更重要的是培养解决实际问题的能力,所以相信通过此次实习可以提高我们分析设计能力和编程能力,为后续课程的学习及实践打下良好的基础。参考文献1谭浩强等,C程序设计,第3版,清华大学出版社,2003
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规划设计方案和建筑方案设计(3篇)
- 有意义纪念日课件
- 月季育种知识培训课件
- 单层厂房建筑方案设计(3篇)
- 2025年疼痛科治疗方案评估模拟考试答案及解析
- 企业安全费用预算及使用管理方案
- 网架安全知识培训课件
- 2025年乳制品奶源质量控制与品牌竞争力评估报告
- 2025年学历类自考专业(护理)儿科护理学(二)-生物化学(三)参考题库含答案解析(5套)
- 工业互联网平台2025数据清洗算法在智能设备数据共享与交换领域的应用实践报告
- 沪教版八年级生物第一册全册完整课件
- 第06章设计美学程能林第4版《工业设计概论》课课件
- DB23-T 3492-2023 工贸企业充电间安全设施技术规范
- 防水工程施工报价表
- 中行bfw框架开发和测试资料课件
- 住院患者非计划性拔管风险评估与护理指导意见
- MSA偏倚分析报告
- 食材配送应急保障配合措施方案
- 泌尿系统结石
- 义务教育语文课程标准(2022)测试题带答案(20套)
- 瞬时弹性成像技术在肝病领域临床应用课件
评论
0/150
提交评论