解决谜题的编程设计

时间:2012-09-21 05:36:00

标签: java recursion puzzle backtracking

很抱歉,如果我在这里发布错了。但我有点不知道应该发布哪个Stackoverflow频道,并认为这是最好的。

我正在解决KenKen拼图。它与数独非常类似,并且有一些总和和操作员的笼子,我们必须使用唯一的数字来解决填充盒。

为了解决这个难题,我将获得一个输入,我可以获得每个笼子的值,例如笼子的总价值,使用的广告箱所涉及的操作员。

根据我使用回溯来解决问题的方法:

  1. 我正在解析输入以为每个笼子创建一个类数据结构。
  2. 后来我为每个笼子创建了一个类对象数组。

  3. 此后我将使用回溯来运用我的算法来解决这个难题。

  4. 在我开始编码之前,我只是想和这里的人讨论,如果他们认为编程方法是正确的,或者我是否仍然需要对方法进行更改,或者他们是否想建议我解决一些问题。

1 个答案:

答案 0 :(得分:1)

我认为回溯可能是解决这个问题的最好方法之一。 老实说,目前我无法找到更好的东西。

我不知道您计划在算法中做些什么。 但我建议你不要只依靠回溯本身。我只阅读维基百科上的文章,了解KenKen是什么。但似乎从一开始就可以改善回溯:

对于回溯,您通常使用堆栈。所以你可能有一个带有对象的堆栈,告诉你哪个号码放在哪个笼子里。 现在你可以给每个堆栈对象一个属性,告诉你的算法是否只是从一堆可能性中选择了这个数字,或者你的算法是否被迫在这个地方选择了这个数字,因为它没有别的选择。 所以不是这样的堆栈:

(2,2) 5
(1,1) 4
(0,0) 1

你的筹码看起来像这样:

(2,2) 5 CHOSEN
(1,1) 4 IMPLIED
(0,0) 1 CHOSEN

然后你必须回溯到最后一个" IMPLIED",因为你不能在这里选择其他值。此外,如果所有其他选择都是错误的,那么某些内容将会被暗示。 我不知道KenKen有多远可能。你应该确保,一开始的选择不能强迫你的算法以后使用IMPLIED,虽然这个数字实际上并非隐含在这个地方。