数独检查&发电机:检查但不会产生

时间:2016-12-02 00:49:43

标签: python python-2.7 random sudoku

我做了一个程序:

  1. 生成(可能是错误的)数独解决方案。
  2. 检查解决方案是否正确
  3. 如果是,请打印出来。
  4. 如果没有,请返回步骤1.
  5. 正确检测有效和无效的解决方案 我从来没有错过。

    可是:

    当告诉程序生成一个新的随机解决方案时,直到它找到一个有效的解决方案,它只是继续运行

    我生成尝试'解决方案'的方法是列出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

      

    我检查的帖子:

         

    请考虑投票。如果您认为这个问题可以改进,请提出建议。

1 个答案:

答案 0 :(得分:2)

记录以及评论中的讨论:

你基本上生成随机9x9矩阵,直到一个是数独解决方案。 问题是你使用非常弱的约束:从1到9的整数,每行都是唯一的。

您实际生成有效解决方案的可能性非常低(计算它是一项很好的数学练习!)。因此,即使它在逻辑上终止,您的代码也可能永远运行。

在这种情况下,依赖于这种程度的随机性并不是正确的解决方案。