问题标签 [sliding-tile-puzzle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1408 浏览

c++ - 在 C++ 8 拼图中传递二维数组时遇到问题

由于某种原因,我无法使该distance功能正常工作。有人可以向我解释我做错了什么吗?

主功能:

曼哈顿距离计算!

0 投票
0 回答
1385 浏览

java - 在 Java 中,计数状态的线性冲突 8 谜题

我需要找到8个拼图状态的线性冲突,状态用int[8]表示,目标状态是{1,2,3,4,5,6,7,8,0}。如果在一行中应该在该行中的两个瓷砖被颠倒,则线性冲突将是。例如,在目标状态下,第一行是 1,2,3,如果在状态下第一行是 2,1,3,那么这是瓷砖 2 和 1 产生的线性冲突。

我的代码可以工作,但是太长且笨拙。这里是:

任何人都知道如何做到更短,更不笨拙。如果我继续这样做,我的代码将很难阅读。

0 投票
1 回答
143 浏览

algorithm - 如何在八字游戏中的两个后代棋盘排列中做出选择?

我正在尝试编写 8 谜题求解器,但我还不能:我使用曼哈顿优先级函数,我想知道,如果后代棋盘排列具有相同的优先级值,如何在它们之间做出选择。

例如:

这是最初的董事会安排:

及其后代董事会安排:

曼哈顿距离 + 移动次数 = 10

曼哈顿距离 + 移动次数 = 12

曼哈顿距离 + 移动次数 = 10

程序应该选择哪种板布置?我还是 III ???

0 投票
1 回答
1462 浏览

algorithm - 如何为 SA 算法制定 8-Puzzle?

如何制定 8 谜题以使用模拟退火算法求解?

我想了很多,但我找不到解决方案!

0 投票
1 回答
1388 浏览

c# - 每 2 秒更新一次 WPF GUI (C#)

我正在做一个 8 Puzzle 求解器,它最终将每个节点(元素 0-8 的 int[])存储在路径中,以便将块按顺序放入堆栈中。我有一个显示 int[,] 的 WPF GUI

GUI 显示初始板,然后单击解决后,最终(按顺序)板正确显示。我想要做的是在板上显示每个节点一段时间,最终到达有序板上。使用 Thread.Sleep,GUI 将在显示最终节点之前暂停设定的时间。关于为什么此代码不会每 500 毫秒在每个节点上显示板的任何想法?

作为参考,以下是 Console.Write 节点的示例输出:
4,2,3,6,1,0,7,5,8
4,2,0,6,1,3,7,5,8
4 ,0,2,6,1,3,7,5,8
4,1,2,6,0,3,7,5,8
4,1,2,0,6,3,7,5,8
0,1,2,4,6,3,7,5,8 1,0,2,4,6,3,7,5,8
1,2,0,4,6,3,7,5
, 8
1,2,3,4,6,0,7,5,8
1,2,3,4,0,6,7,5,8
1,2,3,4,5,6,7,0 ,8
1,2,3,4,5,6,7,8,0

0 投票
1 回答
2024 浏览

math - 8 谜题中的曼哈顿距离

谁能解释我如何在这个例子http://ai.ia.agh.edu.pl/wiki/pl:prolog:pllib:sliding_puzzle中计算 8 个谜题中的曼哈顿距离中计算 8 个谜题中的曼哈顿距离?

它是如何计算的:

一个(0,0)。a(1,0)。一个(2,1)。一个(3,2)。一个(4,3)。一个(5,4)。一个(6,3)。一个(7,2)。一个(8,1)。b(0,0)。b(1,1)。b(2,0)。b(3,1)。b(4,2)。b(5,3)。b(6,2)。b(7,3)。b(8,2)。c(0,0)。c(1,2)。c(2,1)。c(3,0)。c(4,1)。c(5,2)。c(6,3)。c(7,4)。c(8,3)。d(0,0)。d(1,1)。d(2,2)。d(3,3)。d(4,2)。d(5,3)。d(6,2)。d(7,2)。d(8,0)。e(0,0)。e(1,2)。e(2,1)。e(3,2)。e(4,1)。e(5,2)。e(6,1)。e(7,2)。e(8,1)。f(0,0)。f(1,3)。f(2,2)。f(3,1)。f(4,0)。f(5,1)。f(6,2)。f(7,3)。f(8,2)。g(0,0)。g(1,2)。g(2,3)。g(3,4)。g(4,3)。g(5,2)。g(6,2)。g(7,0)。g(8,1)。h(0,0)。h(1,3)。h(2,3)。h(3,3)。h(4,2)。h(5,1)。h(6,0)。h(7,1)。h(8,2)。
我(0,0)。我(1,4)。我(2,3)。我(3,2)。我(4,1)。我(5,0)。i(6,1)。我(7,2)。我(8,3)。

在这段代码中?

0 投票
2 回答
71 浏览

algorithm - 识别矩阵边缘的简单逻辑

我正在尝试计算节点的有效邻居

数组包含元素,如[2,8,3,0,1,4,7,6,5]

矩阵:

它类似于 8 谜题逻辑。在上面的矩阵中,我可以用 2 或 1 或 7 交换 0。我尝试使用 -1、+1、-3、+3。但是 0 不能与 3 交换。所以我不能使用 -1 或 +1。我还需要更新数组中的位置。实现这一目标的逻辑是什么。

0 投票
1 回答
296 浏览

java - 修改8拼图java

我对代码有疑问(它是一个 3x3 矩阵),我必须能够以 2 种方式获胜(水平或循环)

或者

“0”为空白

现在我正在评论一行(我一次只能赢得一种方式),我的问题是:我可以实施什么来赢得所描述的两种方式?非常感谢您。

0 投票
1 回答
2382 浏览

search - 如何使用曼哈顿和汉明启发式解决 Prolog 中的 15 个谜题范式

我有这个 15 拼图游戏的实现,使用 Prolog (Swipl)。我已经使用曼哈顿启发式实现了 A* 搜索,但现在我需要添加汉明启发式。

你知道如何实施吗?

非常感谢

0 投票
2 回答
2945 浏览

c# - 我对 8-Puzzle 的 A* 搜索有什么问题?

我正在尝试使用带有这些启发式的 A* 搜索来解决 8 谜题: - h1:错放瓷砖的数量 - h2:曼哈顿总距离 - h3:上述总和

移动的瓦片被称为 0。

我的目标是解决这些集合:

我遇到的问题是,使用我当前的 A* 实现,它能够解决第一个问题,但不能解决第二个问题。

所以请帮助我了解我的 A* 代码有什么问题:

int[,] current = 从控制台输入为字符串 (412583706) 并转换为代表拼图的 2D int。正确的相同,其中 0 在右下角。

第一个问题用 7 个步骤解决。根据我测试的另一个程序,下一个问题可以用 32 个步骤解决。

我的程序与其他程序的不同之处在于前 4 个步骤是相同的​​,然后其他程序选择了不同的路线,而我的程序只是一直在运行,找不到解决方案。看起来我的程序确实选择了最便宜的节点,所以这就是为什么我不明白哪里出了问题。

这是我第一次使用寻路算法,所以我想解决它。遇到这个问题3天了,感觉试了很多方法,都没有用T_T

此致。

-----编辑----- 附加代码:

---------edit 2-------- 稍微更改了我的代码,但仍然没有运气拼图设置/节点及其启发式方法都在 PuzzleNode 对象中。

// 从当前节点返回下一个可能移动的列表。// 不包括在 closedNodeList 中找到的移动。

------------编辑 3----------------

顺便问一下,我对A*不同步骤的实现是否被正确理解。目前,我的程序的 A* 搜索执行以下操作:

  1. 创建初始列表 OPEN 和 CLOSED,将起始节点添加到 OPEN
  2. 开始循环,从 OPEN 中删除最便宜的节点,将其添加到 CLOSED *最便宜的节点由其曼哈顿距离值决定。
  3. 使用节点查找邻居/孩子/下一步移动,将这些添加到 SUCCESSOR 列表中。
  4. 探索 SUCCESSOR 列表,检查其中是否包含目标状态,否则添加到 OPEN 列表
  5. 重复 2-4,探索列表中的节点。

当我使用 Q1 尝试这些步骤时,我得到了 7 个步骤的解决方案,这是正确的。这也是手工发现的。但是在 Q2 中,它一直持续到 OPEN 列表为空并且没有其他可探索的内容。那么我错过了什么?