根据解决方案

时间:2015-05-13 12:53:54

标签: java sudoku backtracking

我最近刚使用回溯在java中做了一个数独求解器。

考虑到解决方案,是否有可能制定问题或难题?

修改

制定原始拼图,有没有办法实现这个目标?

还有一个问题,

给出了谜题和解决方案。

如果我能够使用解决方案解决难题(结果是谜题)

同时能够使用拼图解决方案(结果是解决方案)

哪个号码更大?

谜题?还是解决方案?

3 个答案:

答案 0 :(得分:4)

可以制定多种可能的原始状态之一。

  1. 从最终解决方案开始(所有数字都存在)
  2. 删除一个号码(随机选择或不随机选择)
  3. 根据电路板的当前状态检查是否可以找回这个号码(你已经有一个求解器,应该很容易)
  4. 如果可以计算这个数字,一切都OK。回到2。
  5. 如果找不到这个号码,请将其放回原处。回到2。
  6. 如果无法删除更多数字,则表示您已达到拼图的原始状态之一。

    如果您选择随机删除的数字(步骤2),您可以多次执行此操作,并获得导致相同最终拼图的不同起点。

答案 1 :(得分:1)

  

如果我能够使用解决方案解决难题(结果是谜题)   并且同时能够使用拼图解决方案(结果是解决方案)

     

哪个号码更大?

     谜题?还是解决方案?

没有明确的答案。

每个解决方案都有2个 81 对应的谜题,包括平凡的谜题。并非所有这些都有一个独特的解决方案,但很多都有。因此,如果所选择的解集仅包含一个元素,那么与解集相对应的最大谜题集就会大得多。

另一方面,the completely blank puzzle affords 6670903752021072936960 solutions。有许多对只共享空白网格作为常见拼图。因此,如果所选择的一组谜题仅包括空白网格,则相应解决方案的集合要大得多。

答案 2 :(得分:1)

从解决方案中创建拼图非常简单。您只需向后应用解决步骤。

例如,如果一行包含8位数字,则可以填写第9行。如果您向后执行此操作,如果一行包含9位数字,则可以删除一个。这将产生一个非常无聊的谜题,但仍然是一个有效的谜题(一个有效的谜题是只有一个解决方案的谜题)。

你所做的步骤越复杂,拼图就越难。实际上,强制拼图是暴力最困难的策略,向后执行它可能归结为随机删除一个数字,然后强力检查是否仍然只有一个独特的解决方案。请注意,您无需解决整个难题:这足以证明只有一种方法可以将删除的数字添加回拼图中。

关于你问题的第二部分:这感觉有点像数学问题,但让我回答:

一个好的谜题只有一个解决方案。由于有多个谜题可以产生相同的解决方案(例如,有81种方法可以填充81个方块中的80个,所有这些方法都可以从不同的谜题中获得相同的解决方案),你可以说有更多的谜题而不是解决方案。

如果您还允许使用多种解决方案的谜题,它会发生变化。对于每个谜题,必须有一个或多个解决方案,但所有这些解决方案也属于该谜题,因此谜题解决方案的数量等于解决方案的谜题数量。无效的谜题不会改变这一点:由于它们属于0个解决方案,因此您不需要属于这些解决方案的其他谜题。

聚苯乙烯。如果它们不需要是唯一可解决的,那么创建谜题也是微不足道的:只需随机删除一些数字即可完成。