推箱子自动求解算法思想
求推箱子自动求解算法思想,请高手指导如何把多个箱子推至目的地,请不要纯粹的贴代码。
搜了一些资料,有人说是用A*算法,如果是推动一个箱子我能理解如何用A*算法,那么多个箱子算法思路是怎么样的?
请高手谈谈算法思想或者给点参考资料
[解决办法]
帮顶……最近玩手机上的推箱子,有一关一直过不去……有哪位写了程序就共享一下吧,帮我把那关过了……囧~
[解决办法]
一个箱子和多个箱子有多大区别啊?
LZ先把一个箱子的A*算法说出来吧。
感觉上多个箱子就是对A*算法进行一些条件限制,只不过算法复杂度就比较高了。
[解决办法]
遍历法
只是不知道速度会不会太慢
[解决办法]
采用A*算法和箱子多少没有关系,箱子再多也要一步一步地推。
将所有箱子当前位置当成一个状态节点来记录,其中任何一个箱子往任何方向挪动一步就会变成另外一个状态节点,所以本质上还是在图中找寻两个节点间的最短路径,可以A*
[解决办法]
如果是推动一个箱子我能理解如何用A*算法,那么多个箱子算法思路是怎么样的?
对于每个状态,生成很多子状态,如果状态已经出现过,那么就放弃(当然,如果是求最优的话,还要注意重新搜索)
这些子状态,加入要扩展的状态集合中,然后按已耗费值进行排序.然后找最小的耗费值,重新进行子状态的生成.
1.注意状态的等价,比如你在空地上移动一步,这是无用功的.没啥意思.也就是说不同的状态,要求至少改变一个箱子的位置.
2.可以考虑一下双向搜索
3.a*的状态空间是指数级的,你可以考虑一下IDA*(迭代加深的A*算法)
[解决办法]
其实人工智能的大部分都可以用A*算法。关键在于如何定义算符。推荐你去看看人工智能应用的帖子。或者借鉴华科出版社的尹朝庆的《人工智能与应用》
上面有个9个格子数字排序的算符。用的倒是宽度优先。不过这个具体的是算符定义。这个要你自己考虑了。
我想的是开始估算步。用启发函数。有一个到了目标点就-1 推近了一个就-0.1
还有神级的遗传算法。主要是算符定义
[解决办法]
学习啦。
还是有点看吧懂啊。
[解决办法]
顶一个
[解决办法]
学习!UP
[解决办法]
http://school.cfan.com.cn/pro/pother/2006-08-28/1156728741d14415.shtml