算法实验报告:罗密欧与朱丽叶迷宫求解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南科技大学
课程设计报告
课程名称:算法设计与分析
设计题目:罗密欧与朱丽叶迷宫求解问题
院系:电子信息工程学院
专业:计算机科学与技术
班级:计算机092班
学生姓名:
学号:09************
起止日期: 2011年5月28日 - 2011年6月3日指导教师:孙士保、张明川、冀治航
课程设计题目罗密欧与朱丽叶的迷宫问题
姓名*** 学号091040602** 班级092班系别电子信息工程学院专业计算机科学与技术
组别1人组长***
组员***
指导教师姓名孙士保、张明川、冀治航
课程设计目的
进一步巩固C程序设计和算法设计与分析的基础知识,提升结构化程序、模块化程序设计的方法和能力,深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。
设计环境1. PC兼容机 2.Windows 2000/XP操作系统3.TC集成开发环境或其他C语言开发环境
课程设计要求和任务要求:1.熟练掌握回溯法,能够利用回溯法解决实际问题;
2.使用文件进行存储和管理。程序启动时可从文件中读取信息,或从键盘输入信息;运行过程中也可对文件进行存取;退出前可选择将部分信息保存
到文件中;
3.不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。
4.对系统进行功能模块分析、画出总流程图和各模块流程图;
5.用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单;
6.通过命令行相应选项能直接进入某个相应菜单选项的功能模块;
7.所有程序需调试通过。
任务:完成罗密欧与朱丽叶的迷宫问题.设计内容包括:
1.确定能对给定的任何位置的罗密欧都能够找到一条通向朱丽叶的路线;
2.程序能够演示一条罗密欧找到朱丽叶的路线过程等。
课程设计工作进度计划
序号起止日期工作内容
1 下发任务书,分组,选定课题,查阅相关资料
2 总体设计,划分模块
3 编制源程序
4 上机调试,修改、完善系统
5 程序检查
6 撰写说明书
河南科技大学
课程设计任务书
课程名称:算法设计与分析
题目:罗密欧与朱丽叶迷宫求解问题
院系:电子信息工程学院
班级:计算机科学与技术092班
学生姓名: *** 指导教师:孙士保、张明川、冀治航
起止日期: 2011年5月28日 - 2011年6月3日
目录
第一章需求分析 (5)
1.1 课程设计题目 ........................................................................................................... (5)
1.2 课程设计任务及要求 (5)
1.3 软硬件运行环境及开发工具 (5)
第二章程序概要设计 (2)
2.1 系统流程图....................................................................................................... .........错误!未定义书签。
2.2 函数的划分.......................................................................................................错误!未定义书签。
2.3函数之间的关系 (3)
第三章编写代码及运行程序 (3)
3.1源程序 (3)
3.2操作及运行结果 (6)
3.3设计的心得体会 (7)
第一章需求分析
1.1课程设计题目
对于给定的罗密欧与朱丽叶的迷宫,编程计算罗密欧通向朱丽叶的所有最少弯道路
程序能够演示一条罗密欧找到朱丽叶的路线过程等
1.2 课程设计任务及要求
罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个m×n的迷宫中,如图所示。每一个方格表示迷宫中的一个房间。这m×n个房间中有一些房间是封闭的,不允许任何人进入。在迷宫中任何位置均可沿8 个方向进入未封闭的房间。罗密欧位于迷宫的。(p,q)方格中,他必须找出一条通向朱丽叶所在的(r,s)方格的路。在抵达朱丽叶之前,他必须走遍所有未封闭的房间各一次,而且要使到达朱丽叶的转弯次数为最少。每改变一次前进方向算作转弯一次。请设计一个算法帮助罗密欧找出这样一条路。
1.3 软硬件运行环境及开发工具
硬件:装有windows操作系统的计算机
软件:Visual C++6.0
第二章 程序概要设计
2.1 系统流程图
2.2函数的划分:
(1)函数1:bool trackback (int x,int y) 递归调用trackback 函数求出最
优路径。
(2)函数2:void isfull() 判断房间是否全部走完
(3)函数3:void main() 主函数初始化迷宫数组,并调用trackback 函数输
出一条迷宫路线。
输入m,n,k,p,q,r,s
-1->dirs count->0
dep=m*n-k&&x=r&&y=s&&dirs<=best
是 否
dep=m*n-k||x=r &&y=s||dirs>best
是 否 dirs 是 否 Count+1->count best=dirs; count=1; 1-.>i 1->j bestw[i][j]=board[i][j]+1->j 直到j<=n i=i->i 直到i<=m z zhai return return 1->i p=x+dir[i][0] q=y+dir[i][1] x>0&& x<=m&& y>0&& y<=n&& board[x][y]=0 是 di!=i 是 dirs-1->dirs board[p][q]=0; board[p][q]=dep +1 di!=i dirs+1->dis 直到ri<=8 输出best ,count **bestw