繁体   English   中英

根据解决方案制定数独难题

[英]Formulate sudoku puzzle given the solutions

我最近才使用回溯在Java中进行了数独求解。

根据解决方案,是否有可能提出问题或困惑?

编辑

要制定原始的难题,有什么方法可以实现?

还有一个问题

给出了难题和解决方案。

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

并同时能够使用难题解决解决方案(结果就是解决方案)

哪个数字更大?

拼图? 或解决方案?

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

  1. 从最终解决方案开始(所有数字都存在)
  2. 删除一个号码(是否随机选择)
  3. 检查是否可以在给出板的当前状态的情况下找到该数字(您已经有一个求解器,应该很简单)
  4. 如果可以计算出该数字,则一切正常。 回到2。
  5. 如果找不到该号码,请将其放回原处。 回到2。

如果没有更多的数字可以删除,则说明您已到达拼图的原始状态之一。

如果选择随机删除的数字(第2步),则可以多次执行此操作,并获得不同的起点,以得出相同的最终谜题。

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

哪个数字更大?

拼图? 或解决方案?

没有明确定义的答案。

每个解决方案都有2 81个相应的谜题,包括琐碎的谜题。 并非所有这些方法都有独特的解决方案,但许多解决方案都有。 因此,如果选择的一组解决方案仅包含一个元素,则共同对应于该解决方案集的最大谜题集将大大增加。

另一方面, 完全空白的难题提供了6670903752021072972936960解决方案 有许多成对的共享空白拼图作为常见难题。 因此,如果选择的拼图组仅包括空白网格,则对应的解决方案组将大大增加。

通过解决方案创建难题非常简单。 您只需向后应用求解步骤。

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

您执行的步骤越复杂,难题就越困难。 实际上,强行解决难题是最困难的策略,向后执行它可能会归结为随机删除一个数字,然后强行检查是否只有一个唯一的解决方案。 注意,您不必解决整个难题:足以证明只有一种方法可以将删除的数字重新添加到难题中。

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

一个好的难题只有1个解决方案。 由于存在多个产生相同解的谜题(例如,有81种方法可以填充81个正方形中的80个,所有谜题都可以通过不同的谜题产生相同的解),所以您可以说谜题多于解。

如果您还允许拼图具有多种解决方案,那么它会发生变化。 对于每个难题,都必须有一个或多个解决方案,但是所有这些解决方案也都属于该难题,因此,难题的解决方案数等于解决方案的难题数。 无效的难题不会改变此情况:由于它们属于0个解决方案,因此您不需要其他属于这些解决方案的难题。

附言 如果难题不需要独特地解决,那么创建难题也很简单:只需随机删除一些数字就可以了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM