繁体   English   中英

尝试在Python中使用随机数为数独创建矩阵

[英]Trying create a matrix for sudoku with random numbers in Python

我需要创建一个数独模板,并全部填充。 我需要处理随机数,因此我检查行和列中是否已经存在该数字。 问题在于,当在列中重复一个数字时,它不会尝试另一个,从而导致无限循环。 有人能帮我吗? 记住我需要处理随机数。

import random
matrix = [[None for i in range(9)] for j in range(9)]

def criarSdk():
    for l in range(9):
        for c in range(9):
            if matrix[l][c] is None:
                tmp3 = False
                print("linha l={}, coluna c={}".format(l,c))
                while tmp3 is False:
                    ale = random.randint(1, 9)
                    tmp1 = veriLine(matrix,ale, l)
                    tmp2 = veriCol(matrix,ale, c)
                    tmp3 = tmp1 and tmp2
                    if tmp3 is True:
                        matrix[l][c] = ale

def veriLine(vetor, value, line):
    tmp = True
    for c in range(9):
        if value == vetor[line][c]:
            tmp = False

    return tmp

def veriCol(vetor, value, col):
    tmp = True
    for l in range(9):
        if value == vetor[l][col]:
            tmp = False

    return tmp

criarSdk()
for i in range(9):
    print(matrix[i])

您的问题不在于代码,而在于算法。

如果这样填充数独,则可能会遇到无法在某些空间填充数字的情况。

考虑一下:

1 2 3 4 5 6 7 8 9
2 1 5 3 4 7 8 6 x

您可以想象第一行被随机值填充(碰巧是按顺序排列),然后第二行的值也被随机值填充,但是要在x中输入什么值? 您不能输入9 ,因为它会在列上发生冲突。 但是您也不能输入其他任何内容,因为其他所有内容都已在线上。

在这种情况下,您的代码将无限循环,尝试使用随机数,但是它们都不起作用。

您需要研究回溯并提出更好的解决方案。 请注意,您需要随机选择一个数字并不一定意味着您继续为新选项调用random.randint() ,也可以从尚未尝试的一组数字中随机选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM