您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 罗密欧与朱丽叶迷宫求解问题
河南科技大学课程设计说明书课程名称__软件专题训练____题目罗密欧与朱丽叶迷宫求解问题_院系_电子信息工程学院计算机系_班级_计算机科学与技术103班__学生姓名___________指导教师_孙士保.冀治航__日期_2012.5.21—2012.5.27__河南科技大学课程设计任务书课程名称__算法设计与分析___题目_罗密欧与朱丽叶地迷宫问题院系_电子信息工程学院计算机系_班级___计算机103班_____学生姓名____魏鹏超______指导教师_孙士保.冀治航__日期_2012.5.21—2012.5.27__课程设计题目罗密欧与朱丽叶地迷宫问题姓名学号班级计算机10级系别计算机科学与技10级专业计算机科学与技术组别组长组员指导教师姓名孙士保.冀治航课程设计目地进一步巩固C程序设计和算法设计与分析地基础知识,提升结构化程序.模块化程序设计地方法和能力,深入理解数据结构地基本理论,掌握数据存储结构地设计方法,掌握基于数据结构地各种操作地实现方法,训练对基础知识和基本方法地综合运用能力,增强对算法地理解能力,提高软件设计能力.在实践中培养独立分析问题和解决问题地作风和能力.设计1.PC兼容机2.Windows2000/XP操作系统4环境3.TC集成开发环境或其他C语言开发环境课程设计要求和任务要求:1.熟练掌握回溯法,能够利用回溯法解决实际问题;2.使用文件进行存储和管理.程序启动时可从文件中读取信息,或从键盘输入信息;运行过程中也可对文件进行存取;退出前可选择将部分信息保存到文件中;3.不同地功能使用不同地函数实现(模块化),对每个函数地功能和调用接口要注释清楚.对程序其它部分也进行必要地注释.4.对系统进行功能模块分析.画出总流程图和各模块流程图;5.用户界面要求使用方便.简洁明了.美观大方.格式统一.所有功能可以反复使用,最好使用菜单;6.通过命令行相应选项能直接进入某个相应菜单选项地功能模块;7.所有程序需调试通过.任务:完成罗密欧与朱丽叶地迷宫问题.设计内容包括:1.确定能对给定地任何位置地罗密欧都能够找到一条通向朱丽叶地路线;2.程序能够演示一条罗密欧找到朱丽叶地路线过程等.5课程设计工作进度计划序号起止日期工作内容12012.5.21下发任务书,分组,选定课题,查阅相关资料22012.5.22总体设计,划分模块,编制源程序32012.5.23上机调试,修改.完善系统42012.5.25程序检查,撰写说明书,上交报告河南科技大学课程设计报告课程名称__软件专题训练____题目_罗密欧与朱丽叶地迷宫问题6院系:电子信息工程学院计算机系专业:计算机科学与技术班级:计算机10级学生姓名:学号:起止日期:2012年5月21日~2012年5月27日指导教师:孙士保.冀治航个人收集整理资料,仅供交流学习,勿作商业用途7目录第一章需求分析..........................................41.1课程设计题目.........................................41.2课程设计任务及要求...................................41.3运行环境及开发工具....................................4第二章概要设计........................................52.1系统流程图5第三章详细设计..........................................63.1函数划分............................................63.2函数之间地关系.......................................6第四章系统调试与操作说明................................74.1系统调试及操作说明...................................7第五章课程设计总结体会..................................85.1课程设计总结.........................................85.2致谢................................................85.3参考文献............................................8个人收集整理资料,仅供交流学习,勿作商业用途8第一章需求分析1.1课程设计题目罗密欧与朱丽叶地迷宫问题1.2课程设计任务及要求1.对于给定地罗密欧与朱丽叶地迷宫,编程计算罗密欧通向朱丽叶地所有最少转弯道路2.程序能够演示一条罗密欧找到朱丽叶地路线过程等罗密欧与朱丽叶地迷宫.罗密欧与朱丽叶身处一个m×n地迷宫中,如图所示.每一个方格表示迷宫中地一个房间.这m×n个房间中有一些房间是封闭地,不允许任何人进入.在迷宫中任何位置均可沿8个方向进入未封闭地房间.罗密欧位于迷宫地(p,q)方格中,他必须找出一条通向朱丽叶所在地(r,s)方格地路.在抵达朱丽叶之前,他必须走遍所有未封闭地房间各一次,而且要使到达朱丽叶地转弯次数为最少.每改变一次前进方向算作转弯一次.请设计一个算法帮助罗密欧找出这样一条路.1.3运行环境及开发工具硬件:装有windows操作系统地计算机软件:VisualC++6.0个人收集整理资料,仅供交流学习,勿作商业用途9第二章概要设计2.1系统流程图输入m,n,k,x,y,x1,y1-1-dirsbest-1000count-0dep==m*n-k&&x==x1&&y==y1&&dirs=best是否否dirsbest是否best=dirs;count=1;1-i1-jbestb[i][j]=board[i][j]j+1-j直到j=ni+i-i直到i=mcount+1-countreturndep==m*n-k||x==x1&&y==y1||dirsbest是否1-ip=x+dx[i]q=y+dy[i]x0&&x=m&&y0&&y=n&&board[x][y]==0是dirs+1-dirs直到i=8di!=i是dirs-1-dirsboard[p][q]=0;board[p][q]=dep+1di!=idirs+1-dirs直到i=8输出best,count**bestb个人收集整理资料,仅供交流学习,勿作商业用途10第三章详细设计3.1函数划分(1)函数1:boolstepok(intx,inty)判断是(x,y)否越界.个人收集整理资料,仅供交流学习,勿作商业用途11(2)函数2:voidsave()保存一条转弯最少地路径(3)函数3:voidsearch(intdep,intx,inty,intdi)在当前位置(x,y)按照八个方向搜索,dep用于标记已经走过地房间数,di表示八个方向.(4)函数4:voidmain()主函数初始化迷宫数组,并调用search函数输出一条迷宫路线.3.2函数之间地关系:主函数调用search函数,search函数调用stepok和save函数完成搜索.如下图:main函数save函数调用search函数递归调用search函数调用stepok函数输出结果个人收集整理资料,仅供交流学习,勿作商业用途12第四章系统调试与操作说明4.1系统调试及操作说明先是输入迷宫中地各个参数:(1).迷宫地行列数及封闭房间个数m,n,k分别是3,4,2.(2).2个封闭房间地坐(p,q))分别是(1,2),(3,4).(3).罗密欧与朱丽叶地坐标(x,y),(x1,y1)分别是(1,1),(2,2).输出:输出一条迷宫路线:(1,1)(2,1)(3,1)(3,2)(2,3)(1,4)(1,3)(2,4)(3,3)(2,2)1-17621058349-1个人收集整理资料,仅供交流学习,勿作商业用途13第五章课程设计总结体会5.1课程设计总结通过本次课程设计地训练,增加了我学习算法地兴趣,虽然还不是很明确其中地具体内容,但已发现算法分析与程序设计地乐趣.老师给了我们四个题目供选择,从选题到完成程序一步步操作实验不仅对题目有了深入地了解,还达到了熟练使用C语言编程地能力.虽然还有很多复杂地问题是我们地能力所不及地,但我相信通过一次次实际地训练操作会使我们地解决问题地能力一步步有所提高.本次程序不是很复杂,只要对算法地有深入地认识与掌握就可以得到输出地结果.但程序中涉及到了多个参数,在上机实验过程中通过一次次实验对算法一步步执行中,彻底弄明白其中地各个参数及函数地作用及用法,特别是对回溯法有了更深地理解.在程序地编写输入输出地过程中虽然其中遇到了很多错误与困难,但正是在解决这些错误与困难地过程中才会使我们地能力有所提高,知识有所更深入地理解,并进一步巩固了C程序设计和算法设计与分析地基础知识,增强对算法地理解能力,提高软件设计能力,熟练掌握了回溯法,能够利用回溯法解决实际问题.虽然只是短短一星期但同学们都在努力学习与实践,我知道只靠这些时间来练习远远不够地,只有平时多练习,才个人收集整理资料,仅供交流学习,勿作商业用途14会达到老师对我们地要求.这次程序设计是让我们学到了好多知识,但也暴露了我们在程序设计中地不足.让我们更深一步体会到了上机实训地重要性.学校给我们安排实训是为培养学生在实践中培养独立分析问题和解决问题地作风和能力,提高实际操作水.让我们了解到除了学习基础知识之外上机实验也是必不可少地,只有通过多次地操作实验才能够提高自己地解决问题能力.5.2致谢感谢本次试验中给予技术等指导地孙士保.冀治航老师,因为他们地指导,本次试验中地部分问题都得到了解决,并且学到了很多东西.感谢张强,于文帅等同学地帮助,和他们探讨问题,解决问题,不但学会了更多地东西,更加深了同学之间地友谊.5.3参考文献计算机算法设计与分析教材(第三版)C/C++程序设计教程(第二版)数据结构(c语言)教材源码#includeiostreamusingnamespacestd;intdir[9][2]={{0,0},{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}};//行走地路线intcount;intdirs,best;intboard[20][20],bestw[20][20];intm,n,k;intlx,ly,zx,zy;boolcomp(intx,inty)//判断是坐标是否越界{if(x0&&x=n&&y0&&y=m&&board[x][y]==0)returntrue;elsereturnfalse;}staticvoidsave()//保存一条转弯最少地路径{个人收集整理资料,仅供交流学习,勿作商业用途15inti,j;for(i=1;i=n;i++)for(j=1;j=m;j++)bestw[i][j]=board[i][j];}voidsearch(intdep,intx,inty,intdi){if(dep==m*n-k&&x==zx&&y==zy&&dirs=best)//dep用于标记已经走过地房间数di表示八个方向{if(dirsbest){best=dirs;count=1;save();}elsecount++;return;}if(dep==m*n-k||x==zx&&y==zy||dirsbest)return;else{for(inti=1;i=8;i++)if(comp(x+dir[i][0],y+dir[i][1])){board[x+dir[i][0]][y+dir[i][1]]=dep+1;if(di!=i)dirs++;search(dep+1,x+dir[i][0],y+dir[i][1],i);if(di!=i)dir
本文标题:罗密欧与朱丽叶迷宫求解问题
链接地址:https://www.777doc.com/doc-5178272 .html