Python 数独棋盘;生成器:已检查但已赢';不产生
我制作了一个程序:Python 数独棋盘;生成器:已检查但已赢';不产生,python,python-2.7,random,sudoku,Python,Python 2.7,Random,Sudoku,我制作了一个程序: 生成(可能错误的)数独解决方案 检查解决方案是否正确 如果是,打印它 如果没有,请返回步骤1 它可以正确检测有效和无效的解决方案。 我从不出错 但是: 当告诉程序生成一个新的、随机的解决方案时,直到找到一个有效的解决方案为止,它只是继续运行 我生成尝试的“解决方案”的方法是列出9个列表,每个列表包含9个数字,每个列表都是1-9个数字,如下所示: SUDOKU_ATTEMPT = [[8, 9, 6, 3, 7, 4, 2, 5, 1],
我从不出错 但是: 当告诉程序生成一个新的、随机的解决方案时,直到找到一个有效的解决方案为止,它只是继续运行 我生成尝试的“解决方案”的方法是列出9个列表,每个列表包含9个数字,每个列表都是1-9个数字,如下所示:
SUDOKU_ATTEMPT = [[8, 9, 6, 3, 7, 4, 2, 5, 1],
[6, 3, 4, 8, 1, 9, 7, 2, 5],
[1, 2, 5, 6, 8, 4, 7, 3, 9],
[1, 2, 9, 4, 3, 7, 8, 5, 6],
[6, 4, 9, 2, 3, 1, 7, 8, 5],
[3, 1, 8, 2, 7, 4, 9, 5, 6],
[3, 7, 2, 8, 4, 9, 5, 6, 1],
[7, 2, 1, 6, 4, 5, 3, 8, 9],
[2, 7, 8, 9, 4, 5, 1, 3, 6]]
如您所见,行
将是正确的。但不一定是
列
,也不一定是3 x 3框
我检查的帖子:
- (但它是C——不是python)
- (Java-不是python)
- (碰到它,但不是我的问题)
- (Java。另外,这是一个不同的问题)
- (不同的问题)
- (Java,不同的问题)
- (Java)
- (不同的问题)
请考虑进行表决。如果您认为这个问题可以改进,请提出建议。记录在案,并从评论中讨论: 您基本上是生成随机9x9矩阵,直到其中一个是数独解。 问题是您使用了非常弱的约束:从1到9的整数,并且每行都是唯一的 您实际生成有效解的概率非常低(计算它是一个很好的数学练习!)。因此,您的代码可能看起来永远运行,即使它在逻辑上终止
在这种情况下,在这种程度上依赖随机性不是正确的解决方案。记录在案,从评论中的讨论可以看出: 您基本上是生成随机9x9矩阵,直到其中一个是数独解。 问题是您使用了非常弱的约束:从1到9的整数,并且每行都是唯一的 您实际生成有效解的概率非常低(计算它是一个很好的数学练习!)。因此,您的代码可能看起来永远运行,即使它在逻辑上终止
在这种情况下,依赖随机性并不是正确的解决方案。是否生成随机的9x9矩阵,其每行都有1到9的整数,直到其中一行是有效的数独解?我不确定什么是矩阵,但我认为答案是肯定的。这取决于您的代码,可能没有优化(这里没有批评者)一个9x9矩阵可能是一个有效的数独解(我三年前计算过,现在已经忘了,但相信我,它很低),可能需要一个小时,或者几年。特别是如果您没有记录先前生成的矩阵(您不能这样做,因为这样会导致内存溢出)。不管怎么说,仅仅依靠随机数并不是一个好的解决方案。看看这一点,你可以尝试很多选择。生成有效数独的一个简单而快速的方法是从一个有效的解决方案开始,然后对它进行一些随机排列,如前所述。你是否生成了随机的9x9矩阵,其每一行都有1到9的整数,直到一个是有效的数独解决方案?我不确定什么是矩阵,但我认为答案是肯定的。根据你的代码,可能没有优化(这里没有批评者)以及9x9矩阵是有效数独解决方案的概率(我三年前计算过,但相信我,它很低),可能需要一个小时,或者几年。特别是如果您没有记录先前生成的矩阵(您不能这样做,因为这样会导致内存溢出)。无论如何,仅仅依靠随机性并不是一个好的解决方案。看看这一点,你可以尝试很多选择。生成有效数独的一个简单而快速的方法是从一个有效的解决方案开始,然后按照描述对其进行一些随机排列。你可以在我的GitHub上看到我的解决方案!谢谢你的帮助,请考虑投票,你可以在我的Github上看到我的解决方案!谢谢你的帮助,请考虑投票。