- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
???????????????????????最新资料推荐???????????????????
课程设计报告文档
题目: 罗密欧与朱丽叶的迷宫问题
一.任务的描述
1.问题描述:
罗密欧与朱丽叶的迷宫。罗密欧与朱丽叶身处一个 m× n 的迷宫中。每一个方
格表示迷宫中的一个房间。这 m×n 个房间中有一些房间是封闭的,不允许任何人
进入。在迷宫中任何位置均可沿 8 个方向进入未封闭的房间。 罗密欧位于迷宫的 (p ,
q) 方格中,他必须找出一条通向朱丽叶所在的 (r ,s) 方格的路。 在抵达朱丽叶之前,
他必须走遍所有未封闭的房间各一次, 而且要使到达朱丽叶的转弯次数为最少。 每
改变一次前进方向算作转弯一次。请设计一个算法帮助罗密欧找出这样一条道路。
对于给定的罗密欧与朱丽叶的迷宫, 编程计算罗密欧通向朱丽叶的所有最少转弯道
路。
输入数据:第一行有 3 个正整数 n,m,k,分别表示迷宫的行数,列数和封闭的房间数。接下来的 k 行中,每行 2 个正整数,表示被封闭的房间所在的行号和
列号。最后的 2 行,每行也有 2 个正整数,分别表示罗密欧所处的方格 (p , q) 和
朱丽叶所处的方格 (r , s) 。
结果输出 : 将计算出的罗密欧通向朱丽叶的最少转弯次数和有多少条不同的
最少转弯道路。文件的第一行是最少转弯次数。文件的第 2 行是不同的最少转弯
道路数。接下来的 n 行每行 m 个数,表示迷宫的一条最少转弯道路。 A[i][j]=k 表
示第 k 步到达方格 (i,j) ;A[i][j]=-1 表示方格 (i,j) 是封闭的。 如果罗密欧无法通向
朱丽叶则输出“ No Solution! ”。
输入文件示例
4 3 2
1 2
3 4
1
2
输出文件示例
6
7
1
-1
9
8
2
10
6
7
3
4
5
-1
任务目标:( 1)确定能对给定的任何位置的罗密欧都能够找到一条通向朱丽叶的路线;
(2)程序能够演示一条罗密欧找到朱丽叶的路线过程等。
3.运行环境: vc++6.0
二.任务设计
1.系统流程图:
程序概要的流程图如下:
1
???????????????????????最新资料推荐???????????????????
数据初始化
得到罗密欧
位置
沿八个方向
搜索
否
是否满足剪枝函数
是
沿该方向深
度搜索
否
继续朝其它方
是否得到一个解
向搜索
是
与当前最优解比
较,适时更新
2.函数的划分:
(1)函数 1:void print() // 调用自动显示函数 au()和动态显示函数 dynamic(),输出一条转弯最少的路径
2)函数 2: void search(intdep ,int x,int y,int di); // 执行搜索,结果保存在
bestb二维数组中,供输出使用
( 3)函数 3: bool consistant(int x ,int y,int dep) //约束剪枝函数
4)函数 4: void save(); //save保存找到的最优路线
5)函数 5: int StepOk(int x,int y);// 用于判断是否越界和可通过
6)函数 6: void au()// 自动显示一条路径
7)函数 7: void dynamic()// 动态显示一条路径
8)函数 8: void init()// 完成数据输入
2
???????????????????????最新资料推荐???????????????????
9)函数 9: int main(); // 主函数 ,调用 init() 和 search()及 print() ,实现相应的功能
3.函数之间的关系:
从主函数开始运行,调用 init() 函数,输入迷宫行数列数封闭房间数,输入 罗 密 欧 与 朱 丽 叶 坐 标 后 输 出 迷 宫 图 ; 然 后 开 始 执 行 搜 索 函 数 search(int ,int,int,int) ,进行搜索,在搜索函数中会调用剪枝函数 consistant()
StepOk()及保存函数 save(),将路径保存在 bestb 矩阵当中;由 print() 函
数调用 au() 和 dynamic() 函数,将找到的一条路径在屏幕上动态地输出;
三.分组情况
本人组长负责执行搜索模块,其他两人分别实现自动显示和动态显示
四.编写代码
1.问题 1
(1)问题描述:程序需要处理不同的迷宫大小
(2)解决办法:可以预先分配很大的内存空间和动态地分配一个矩阵数组给予解决,这里采用动态分配方式,提高空间利用率
2.问题 2
(1)问题描述:执行搜索时,最少转弯数运行结果不对
(2)解决办法:反复检查,没能理解题意,第一步应该可以朝任何方向而都
原创力文档


文档评论(0)