【发布时间】:2016-12-02 00:49:42
【问题描述】:
我做了一个程序:
- 生成(可能是错误的)数独解决方案。
- 检查解决方案是否正确
- 如果是,打印它。
- 如果没有,请返回步骤 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]]
如您所见,rows 是正确的。
但不是(必然)columns,也不是3 x 3 boxes。
我查看的帖子:
- Random sudoku generation(但它是 C - 不是 python)。
- Recursive solution to Sudoku generator(Java - 不是 python)。
- Generating minimal/irreducible Sudokus(碰到了它,但不是我的问题)。
- Java sudoku generator not working correctly(Java。另外,这是一个不同的问题)。
- Generation of sudoku questions(不同的问题)。
- Sudoku generator loop(Java,不同的问题)。
- Sudoku generation speed (Java)
- Sudoku Generator(不同的问题)。
请考虑投票。如果您认为这个问题可以改进,请提出如何改进。
【问题讨论】:
-
您是否正在生成随机的 9x9 矩阵,其每一行的整数从 1 到 9,直到其中一个是有效的数独解决方案?
-
我不确定什么是矩阵,但我认为答案是肯定的。
-
取决于您的代码,这可能没有优化(这里没有批评者)以及 9x9 矩阵是有效数独解决方案的概率(我在三年前计算并忘记了但相信我它很低),可能需要一小时或数年。特别是如果您不记录先前生成的矩阵(您不能这样做,因为您会造成内存溢出)。无论如何,这里只依赖随机并不是好的解决方案。
-
看看stackoverflow.com/questions/6924216/…,它为您提供了许多尝试的选择。
-
生成有效数独的一种简单而快速的方法是从一个有效的解决方案开始,然后按照here 的描述对其进行一些随机排列。
标签: python python-2.7 random sudoku