微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解决难题的算法,可将棋子移到退出位置

如何解决解决难题的算法,可将棋子移到退出位置

我正在寻找一些建议,建议使用什么好的算法来解决带有Javascript的附加图像上的难题,最好是在算法已记录下来并且可能包含JS示例的情况下。

enter image description here

白色棋子可以一次,四个方向移动到灰色斑点中(如果适合) 当较大的白色棋子到达红色退出点时,游戏结束。

这只是为了好玩。

我正在用Javascript制作它,我将使用p5.js来显示它。 我不是在寻找实际的代码解决方案,这是一个有趣的个人练习。

我过去曾尝试过,但是没有用,我记得它花了很多时间来计算出口路径,但几分钟后却找不到。

所示的拼图是一个非常基本的版本,可以理解这个主意,但是每次绘制的板子都会越来越复杂,例如就像在较大的木板上放很多不同大小的白色块。

我知道我可以尝试 breadth-first-search 算法,尽管如此,我不知道如果董事会规模扩大,它是否仍然适合,例如5x7而不是3x3,我不知道如何估算计算机可以找到最短出口路径的排列数量

通过BFS,我了解到,从给定的董事会状态来看,我需要探索所有可能的分支,每个分支是一个不同的分支,这可能导致数百万个组合,其中每个组合将探讨如果发生什么情况,给定的对象将移至此处而不是此处。

  • 我会随机选择要移动的下一块吗?也许不是,由于不断变化,这可能更难调试。也许我会选择从TOP LEFT开始可以移动的第一块。

  • 如何防止回归?例如。产生一个已经在其他分支中进行过探索的板子?

感谢您的时间和耐心:)

解决方法

根据http://groups.csail.mit.edu/mac/users/bob/sliding-blocks.pdf,滑动难题通常可以在NP完全问题的世界中占据一席之地,这些问题通常比较麻烦且计算量大(如果可以解决)。这说明了为什么您甚至都很难尝试计算路径。

通常没有通用的方法来解决此类问题,因为每个问题都需要特定的量身定制的解决方案。

在您的特定情况下,尽管我建议尝试一种幼稚的路径查找方法,即首先尝试使部件尽可能接近,然后再进行一次移动,然后尝试将部件推离潜在路径“。 / p>

我希望这可以为您指明正确的方向:-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。