【发布时间】:2014-08-14 03:37:30
【问题描述】:
由于缺乏信息,我的上一个问题here 被锁定,我现在将尝试进一步解释以消除混淆。
好的,请先了解一下我在做什么的背景信息。
我开始了一个制作数独游戏的个人项目,以学习面向对象编程、ArrayList、算法、模型/控制/设计层,并总体扩展我的编程知识。
我在制作这款游戏方面已经走了很长一段路,它已接近完成,但我遇到了一个需要帮助解决的小问题。
我在生成 3 个数独时遇到了问题,一个简单的,一个中等的,一个困难的。
简单和中等难度的数独是可以解的,但难的数独是无法解的。
它是如何工作的:
首先,我有一个使用随机数生成和验证的算法来生成一个有效的数独板,然后我将它传递给另一个算法,该算法遍历 9x9 板上的所有数字并以百分比的机会删除它们,这个百分比机会在调用时指定方法,例如 50% 的机会删除一个数字很容易和 65% 的机会很难。
我的问题:
好的,所以我的问题是我在“困难”难度下生成了一个数独,但发现它无法解决。现在我没有验证方法来检查这个谜题是否可以以任何方式解决,所以长话短说它是否可以解决是偶然的。
我需要什么:
我需要一个算法或方法来验证这个谜题是否是可解决的,因为现在我只有一个随机的机会可以解决它,因为随机数删除的机会。这不应该使用蛮力(回溯)来完成,而是应该看看这个谜题并决定哪些数字去哪里,基本上就像你我会解决它一样。这样我不仅可以验证它是否有一个解决方案,还可以验证你和我是否可以解决它。
变量的小图形视图以及类的连接方式:
使用上述示例对数独的结构进行直观表示:
数独中的 1 到 9 数字是单元格 1 到 9。
如果您需要有关该计划的更多详细信息,请告诉我,我会将其添加到此表单中,我只是尽量保持简短,同时仍试图涵盖与此问题相关的所有内容。
【问题讨论】:
-
请注意,通常您应该编辑上一个问题,而不是就同一件事提出新问题...此外,您应该使您的问题更清楚。它隐藏在事物的中间,有点容易错过。
-
我认为,如果一个数独谜题作为一种解决方案,我不认为这意味着获得的解决方案是唯一的解决方案。因此,您对溶解度的测试可能不够充分。如果我错了,请纠正我。
-
你是说无法解决的仍然可以解决吗?如果是这样,你有一个算法错误。
-
@user3580294 我知道,但我认为这个问题无法挽救。
-
在解决数独谜题时,我有时会使用铅笔和橡皮擦回溯的try and see further方法......不是只有一个人这样做!