推箱子游戏算法的一点改进:拉箱子

本文提出了一种改进推箱子游戏算法效率的方法:通过将推箱子改为拉箱子,并从目标位置追溯到初始位置来减少递归搜索的空间。这种方法在很多地图上能够显著减少不必要的搜索路径,从而提高算法效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在写一个电脑自己寻找路径推箱子的游戏

递归当然少不了

但我发现一个使不少地图下效率提高很多的方法:

      把推箱子改成拉箱子

      从目标位置向箱子起始位置走

 

 

      再仔细看一下推箱子游戏的地图你会发现很多情况下,目的位置是连续的,

而且靠着墙壁,也就是说如果拉箱子的话,只有相比之下很少的几种选择

你知道,在递归情况下,减少情况会很大程度的提高算法效率,

这正是剪枝、A*等算法得以推广的原因

      我们在寻找算法时总要增加约束、减少遍历情况,虽然这种“倒行逆施”

并未增加什么约束,但使情况减少了很多,对于不少的图,这种效率的提高是

质的

      

       推箱子亦有类似之处,不少地图下,起始状态,也就是箱子可移动的位置

很多,但终态却很少,

      换个角度,有时候问题会变得很简单

 

´问题描述: 码头仓库是划分为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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值