找出混乱游戏的最小移动次数

时间:2012-08-01 08:24:43

标签: java linear-programming

我想制作一款小型Jumbler游戏。我打算使用Java编程语言制作这个游戏。以下是该游戏的小屏幕截图。我找不到 包含此游戏的任何其他网站。

Screen shot of the game at the end of the page

在这个游戏中,我想添加两个功能。

1. Manually solve the problem.
2. Automatically solve the problem.
  

手动解决问题

意味着我们玩游戏并找到解决方案,以便按照安排顺序制作数字

  

直观地解决问题

表示计算机以图形方式显示所需的最小移动次数  为解决方案。这意味着计算机以图形方式显示运动并以最小的移动识别解决方案。

那么如何编程这种情况呢?

我在互联网上搜索并获得了一些与线性编程相关的教程。我应该学习什么 为了解决这类问题?我不知道如何解决自动解决方案。请给 一些很好的教程,我可以很容易地掌握它。

2 个答案:

答案 0 :(得分:1)

当你所有的东西都是锤子时,一切看起来都像钉子一样 - 所以我会说使用constraint programming可以解决这类问题。但这就是我有一点经验。

基本上,你有一个电路板布局,每个'步骤'都有少量有效的移动。目标是进入已知布局(升序)。

要“自动”执行此操作,您需要将程序搜索作为解决方案路径。执行此操作的步骤如下:

  1. 当前布局中,确定有效的移动。
  2. 在完成每个有效移动后计算布局。
  3. 检查是否有任何计算出的布局是解决方案;如果是的话,你就完成了。
  4. 如果没有任何动作导致解决方案,请计算出所有新的有效动作,并从1开始重复。
  5. 你会遇到一些问题。首先,内存限制(制作大量的电路板布局可能不起作用)。其次,时间/计算约束(可能需要很长时间才能找到解决方案)。您可以采取一些措施来至少将这些问题的损害降至最低。

    1. 选择一个好的搜索方法。例如Breadth-first而不是Depth-first。这将减少查找解决方案所需的时间并减少内存需求。
    2. 有些动作是“倒退”。例如,将方形A移动到B,然后将方形B移动到A(重复移动)。搜索这些“循环”既无意义又浪费资源,因此您需要确保不要这样做。
    3. 搜索空间中可能存在对称性。我还没有解决你的特定问题,我也不能给你特定的例子,但是n-queens有一个关于特定于这个问题的对称性的很好的部分 - 如果你正在尝试的话可能值得一读找到问题的对称性。
    4. 这可能会给你一些信息或想法开始寻找。

答案 1 :(得分:0)

我不知道我是否理解......

最小发生率和最小路径是动态编程问题

http://en.wikipedia.org/wiki/Dynamic_programming

非常简短,您必须计算所有解决方案并展示更好的解决方案。动态编程并不是那么容易理解和开发,但你可以试试......

但是,我建议你记住你如何混合它并展示解决方案......