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]
]
это работает. Я не понимаю разницы между платами, чтобы моя программа решала это или нет. Мои алгоритмы неверны?