Итак, я решил написать решателя Sudoku, используя метод Backtrack, чтобы решить судоку. Мне показалось, что я заработал, но это не так. Мне кажется, что когда он должен вернуться к предыдущей ROW, он не сможет справиться с этим, он может вернуться только в том же ряду, который мне кажется. Не стесняйтесь задавать больше вопросов, код следующий (жаль, что это не на английском языке):Python sudoku solver останавливается посередине
import sys
rida = 0
veerg = 0
maatriks = []
# Loeb failist maatriksi sisse ja teeb temast listide listi.
def looMaatriks(sisendfail, maatriks):
fail = open(sisendfail)
for line in fail:
line = line.strip()
if line != "":
rida = line.split(" ")
for i in range (0, 9):
if rida[i] != "-":
rida[i] = int(rida[i])
else:
rida[i] = 0
print(line.split(" "))
maatriks.append(rida)
return maatriks
maatriks = looMaatriks('sisend1.txt', maatriks)
#print(maatriks)
# Kontrollib, kas antud ruudukeses on number juba või mitte.
def numberOlemas(maatriks, rida, veerg):
print(rida)
print(veerg)
if maatriks[rida][veerg] != 0:
return True
else:
return False
print(numberOlemas(maatriks, 1,0))
# Kontrollib, kas arv sobib antud ruutu.
def kasSobib(maatriks, rida, veerg, arv):
for i in range (0, 9):
if arv == maatriks[rida][i]:
return False
for i in range (0, 9):
if arv == maatriks[i][veerg]:
return False
return True
def prindiMaatriks(maatriks):
for i in range (0, 9):
print(maatriks[i])
print("")
def lahendaRuut(maatriks, rida, veerg):
prindiMaatriks(maatriks)
if numberOlemas(maatriks, rida, veerg) == True:
print("juba olemas")
if veerg > 7:
print("yolo2");
rida = rida + 1
if rida > 8:
print("DONE!")
sys.exit()
veerg = -1
lahendaRuut(maatriks, rida, veerg + 1)
else:
for i in range (1, 10):
if kasSobib(maatriks, rida, veerg, i):
maatriks[rida][veerg] = i
if veerg > 7:
print("yolo");
rida = rida + 1
if rida > 8:
print("DONE!")
sys.exit()
veerg = -1
lahendaRuut(maatriks, rida, veerg + 1)
print("ei sobi")
prindiMaatriks(maatriks)
lahendaRuut(maatriks, rida, veerg)
Спасибо! Я тоже добрался до него, но все же он иногда меняет числа, которые заданы, и это бесполезно, и поэтому оно не решит его. –