第3-7课:推箱子游戏

本文介绍了使用穷举法和A*算法解决推箱子游戏的策略。通过建立地图数据模型,用二维坐标表示游戏元素,并通过A*算法优化搜索效率,避免无效状态。游戏状态、动作和搜索算法的设计与实现是关键,同时讨论了死点判断和目标状态的确认。最后,提出了实现最优解输出的课后作业。
摘要由CSDN通过智能技术生成

推箱子游戏也是一个很经典的益智类小游戏,很多推箱子游戏软件都提供过程演示的功能,当玩家走投无路的时候,可以看看游戏给出的解答过程,这个过程其实就是游戏自己推算出来的最佳推箱子路线。这一课我们就来试试用穷举法求解推箱子游戏。

游戏介绍

图(1)展示了一个典型的推箱子游戏的截图,左边是游戏的初始状态,右边是游戏成功结束的状态。游戏在一个二维平面“地图”上操作,游戏开始时有若干只箱子和与之数量相同的目的位置,玩家控制一个小人推动箱子到指定的位置,当全部箱子都被推到指定位置时,游戏就结束。箱子有四个面,玩家每次只能从一个面推动箱子向相反的方向移动。为了增加难度和趣味儿性,地图上一般都会布置一些障碍物阻挡箱子,使其不能被顺利地推到目的地。

enter image description here

图(1)一个推箱子游戏的例子

游戏中的地图实际上可以看作是由一个个小格子组成的,每个格子可以是墙、箱子或小人。为了将重点放在算法上,我们对这个游戏做一个简化处理,用各种字符表示地图上的各种元素,比如用空格字符表示空地,用大写字母 'B' 表示箱子,用

´问题描述: 码头仓库是划分为n×m个格子的矩形阵列。有公共边的格子是相邻格子。当前仓库中 有的格子是空闲的;有的格子则已经堆放了沉重的货物。由于堆放的货物很重,单凭仓库管 理员的力量是无法移动的。仓库管理员有一项任务,要将一个小箱子推到指定的格子上去。 管理员可以在仓库中移动,但不能跨过已经堆放了货物的格子。管理员站在与箱子相对的空 闲格子上时,可以做一次推动,把箱子推到另一相邻的空闲格子。推箱时只能向管理员的对 面方向推。由于要推动的箱子很重,仓库管理员想尽量减少推箱子的次数。 ´编程任务: 对于给定的仓库布局,以及仓库管理员在仓库中的位置和箱子的开始位置和目标位置, 设计一个解推箱子问题的分支限界法, 计算出仓库管理员将箱子从开始位置推到目标位置所 需的最少推动次数。 ´数据输入: 由文件input.txt提供输入数据。输入文件第 1 行有 2个正整数 n和 m(1<=n,m<=100) , 表示仓库是n×m个格子的矩形阵列。接下来有 n行,每行有 m个字符,表示格子的状态。 S 表示格子上放了不可移动的沉重货物; w 表示格子空闲; M 表示仓库管理员的初始位置; P 表示箱子的初始位置; K 表示箱子的目标位置。 ´结果输出: 将计算出的最少推动次数输出到文件 output.txt。如果仓库管理员无法将箱子从开始位 置推到目标位置则输出“No solution!” 。 输入文件示例 输出文件示例 input.txt output.txt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吹泡泡的小猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值