Java 数独逻辑求解器

Java 数独逻辑求解器,java,algorithm,sudoku,Java,Algorithm,Sudoku,由于缺乏信息,我锁定了最后一个问题,我现在将尝试进一步解释,以消除混淆 好的,左一步,获取一些关于我正在做什么的背景信息。 我开始了一个制作数独游戏的个人项目,学习面向对象编程、数组列表、算法、模型/控制/设计层,并扩展我的编程知识。 我在制作这个游戏方面已经走了很长一段路,它即将完成,但我遇到了一个需要帮助解决的小问题 我在生成3个数独游戏时遇到了这个问题,一个简单,一个中等,一个困难。 简单和中等难度的数独是可解的,而硬数独是不可解的 工作原理: 首先,我有一个使用随机数生成和验证生成有效数

由于缺乏信息,我锁定了最后一个问题,我现在将尝试进一步解释,以消除混淆

好的,左一步,获取一些关于我正在做什么的背景信息。
我开始了一个制作数独游戏的个人项目,学习面向对象编程、数组列表、算法、模型/控制/设计层,并扩展我的编程知识。
我在制作这个游戏方面已经走了很长一段路,它即将完成,但我遇到了一个需要帮助解决的小问题

我在生成3个数独游戏时遇到了这个问题,一个简单,一个中等,一个困难。
简单和中等难度的数独是可解的,而硬数独是不可解的

工作原理:
首先,我有一个使用随机数生成和验证生成有效数独板的算法,然后我将其传递给另一个算法,该算法遍历9x9板上的所有数字,并以百分比概率移除它们,该百分比概率在调用该方法时指定,例如,50%的几率删除一个简单的数字和65%的几率为硬

我的问题:
好吧,我的问题是,我生成了一个难度为“硬”的数独游戏,发现它无法解决。现在我没有验证方法来检查这个谜题是否可以以任何方式解决,所以长话短说,如果它可以解决的话,这是偶然的

我需要什么:
我需要一个算法或方法来验证这个谜题是否可以解,因为现在我只有一个随机的机会可以解,因为随机数移除的机会。这不应该使用暴力(回溯)来完成,而是应该看看谜题,决定数字的去向,基本上就像你和我解决它一样。这样,我不仅可以验证它是否有一个单独的解,还可以验证你和我是否可以解

变量和类如何连接的小图形视图:

使用上述示例直观地展示了数独的结构:

数独游戏中1到9的数字是1到9的单元格


如果您需要有关该计划的更多详细信息,请告诉我,我会将其添加到此表格中,我只是尽量使其简短,同时仍试图涵盖与此问题相关的所有内容。

我将尝试回答您明确或隐含的问题:

“首先,我有一个算法,使用随机数生成和验证来生成有效的数独板”


如果您的算法确实生成了一个有效的数独板,那么它应该是可解的。如果这不是你所说的可解性,请详细说明

“我需要一个算法或方法来验证这个难题是否可以解决,因为现在我只有一个随机的机会可以解决,因为随机数删除的机会。”

任何求解数独的算法都将验证它确实是可解的。任何数字删除实际上都可能使游戏更难解决,并可能增加有效解决方案的数量,从而使其无效(参见Serge Ballesta的巧妙评论)。我还想提一下:“数独游戏一般分为简单、中等或困难三类,其中开始线索较多,但解决起来并不总是那么容易。但从数学上量化难度是很困难的。”。看

“这不应该使用暴力(回溯)来完成,而是应该看看谜题并决定数字的去向,基本上就像你和我解决它一样。”


您要求的是一种算法,该算法在解决此问题时模拟人类的行为和思维。我认为这不是一个可行的要求,很可能属于人工智能的研究领域。人类解决数独等难题的思路因人而异。初学者可能会采用类似于回溯深度优先搜索的方法。在处理难题时,这不是人类最有效的方法。在国际象棋等游戏中,这根本不是一种可持续的方法。专家们倾向于通过对董事会的整体看法来识别模式。我很肯定,数独高手也会遵循类似的过程。请参见

我将尝试回答您明示或暗示的问题:

“首先,我有一个算法,使用随机数生成和验证来生成有效的数独板”


如果您的算法确实生成了一个有效的数独板,那么它应该是可解的。如果这不是你所说的可解性,请详细说明

“我需要一个算法或方法来验证这个难题是否可以解决,因为现在我只有一个随机的机会可以解决,因为随机数删除的机会。”

任何求解数独的算法都将验证它确实是可解的。任何数字删除实际上都可能使游戏更难解决,并可能增加有效解决方案的数量,从而使其无效(参见Serge Ballesta的巧妙评论)。我还想提一下:“数独游戏一般分为简单、中等或困难三类,其中开始线索较多,但解决起来并不总是那么容易。但从数学上量化难度是很困难的。”。看

“这不应该使用暴力(回溯)来完成,而是应该看看谜题并决定数字的去向,基本上就像你和我解决它一样。”

您要求的是一种算法,该算法在解决此问题时模拟人类的行为和思维。我认为这不是一个可行的要求,很可能属于人工智能的研究领域。人类解决难题的思路