Algorithm 寻找最小距离的特殊滑动拼图算法
我只是偶然发现了一个奇怪的(非常烦人的)游戏,我想通过编程来解决。它让人想起了魔方,但却是二维的。我正在努力解决这个问题 有一个9x9的正方形,其中一些圆放置在内部正方形中。例如,我们可以看到以下图片:Algorithm 寻找最小距离的特殊滑动拼图算法,algorithm,sliding,Algorithm,Sliding,我只是偶然发现了一个奇怪的(非常烦人的)游戏,我想通过编程来解决。它让人想起了魔方,但却是二维的。我正在努力解决这个问题 有一个9x9的正方形,其中一些圆放置在内部正方形中。例如,我们可以看到以下图片: A B C D E F G H I ------------------------------------- 9 | | | O | |
A B C D E F G H I
-------------------------------------
9 | | | O | | | O | | | | J
-------------------------------------
8 | | | O | | O | | O | | | K
-------------------------------------
7 | | | | O | | | O | O | | L
-------------------------------------
6 | | | O | | | | O | | | M
-------------------------------------
5 | | | O | | | | | | | N
-------------------------------------
4 | | | | O | | O | O | | | O
-------------------------------------
3 | | | | | O | | O | | | P
-------------------------------------
2 | | | | O | | | | | | Q
-------------------------------------
1 | | | O | | | | | | | R
-------------------------------------
0 Z Y X W V U T S
可以使用正方形周围的数字和字母将整个“行”或“列”向左/向右或向上/向下移动。离开游戏区到右边的圆圈将重新出现在左边,反之亦然,上/下的情况相同
目标是以最大的移动量将圆重新排列为给定的模式。例如,应重新排列上图中的圆圈,以最多17个移动反映下图:
A B C D E F G H I
-------------------------------------
9 | | | | | | | | | | J
-------------------------------------
8 | | | O | O | O | O | O | | | K
-------------------------------------
7 | | | O | | | | O | | | L
-------------------------------------
6 | | | O | | | | O | | | M
-------------------------------------
5 | | | O | | | | O | | | N
-------------------------------------
4 | | | O | | | | O | | | O
-------------------------------------
3 | | | O | O | O | O | O | | | P
-------------------------------------
2 | | | | | | | | | | Q
-------------------------------------
1 | | | | | | | | | | R
-------------------------------------
0 Z Y X W V U T S
我想把圆的起始和结束位置输入到一个程序中,该程序提供了可能的最短路径。我正在努力寻找一种方法,不只是尝试所有可能的移动,直到达到给定的最大移动次数
此外,修改用于求解魔方的方法似乎也不是那么容易,例如
嗯,我认为这是一个非常有趣的问题,也许这里有人有一个启发性的想法
更新:
第一次尝试之后,尝试所有可能的动作似乎并不现实。有太多的排列。我认为这可能真的很难解决……如果可能的话。这个问题很好。在你伤到你的头之前,我会停止使用这种方法“我想将圆的起始和结束位置输入到一个程序中,该程序提供尽可能短的路径”。我怀疑你会找到这样一个最佳算法。您可能会更好地使用启发式,或者尝试在一定数量的移动范围内进行。现有的魔方算法都是一样的——没有“最优算法”,许多聪明人已经研究了30多年。对问题空间的彻底搜索将揭示最优解决方案。但这可能需要很长时间。但这是一个很好的起点,然后使用启发式算法来降低复杂性。我只是想知道“魔方”算法的启发式方法是否足以将复杂性降低到普通计算机可以处理的水平。我不再那么确定了…:-)但我同意,用一定的动作来解决它会更有意义。但同样,例如,最多40次移动仍然会带来大量的可能性。