моя программа решения судоку не решает все проблемы судоку - PullRequest
0 голосов
/ 14 января 2020
    board=[
    [0,0,0,0,6,4,0,0,0],
    [7,0,0,0,0,0,3,9,0],
    [8,0,0,0,0,0,0,0,0],
    [0,0,0,5,0,2,0,6,0],
    [0,8,0,4,0,0,0,0,0],
    [3,5,0,6,0,0,0,7,0],
    [0,0,2,0,0,0,1,0,3],
    [0,0,1,0,5,9,0,0,0],
    [0,0,0,0,0,0,7,0,0]
]
def dokuzkarecheck(satırno,sutunno,karakter):
    y=satırno//3*3
    x=sutunno//3*3
    samekare=[]
    for a in range(3):
        for b in range(3):
            samekare.append(board[a+y][b+x])
    if karakter in samekare:
        return False
    else:
        return True

def satırsutuncheck(satırno,sutunno,karakter):
    for j in range(9):
        if board[satırno][j] is karakter or board[j][sutunno] is karakter:
            return False
    return True
def check(satırno,sutunno,karakter):
    if dokuzkarecheck(satırno,sutunno,karakter) and satırsutuncheck(satırno,sutunno,karakter):
        return True
    else:
        return False
def contain(board,karakter):
    for satır in board:
        for eleman in satır:
            if eleman is karakter:
                return True
    return False
def posnumbers(satırno,sutunno):
    pos=[]
    if board[satırno][sutunno] is not 0:
        return 0
    for i in range(1,10):
        if check(satırno,sutunno,i):
            pos.append(i)
    return pos

def solve(tahta):
    while contain(tahta,0):
        for x in range(9):
            for y in range(9):
                if posnumbers(x,y) is not 0:
                    if len(posnumbers(x,y)) is 1:
                        board[x][y] = posnumbers(x,y)[0]
    return board

for row in solve(board):
    print(row)

приведенный выше код работает для некоторых судоку, но не для всех. Я не понимаю проблемы. Он не работал для платы в коде, но когда я меняю плату на:

board=[
     [0,3,5,8,1,6,0,0,0],
     [4,7,0,0,0,9,0,0,0],
     [8,0,0,5,0,7,3,9,0],
     [0,0,2,7,0,0,0,5,0],
     [0,8,3,0,9,0,0,2,0],
     [0,6,9,0,3,0,1,8,7],
     [0,0,0,6,0,0,2,0,0],
     [2,0,0,9,0,0,0,6,8],
     [0,5,7,0,0,0,0,3,0]
 ]

это работает. Я не понимаю разницы между платами, чтобы моя программа решала это или нет. Мои алгоритмы неверны?

...