所以,我决定写一个数独解算器使用回溯方法来解决一个数独。在我看来,我让它工作了,但它没有。在我看来,当它必须移回前一行它不能处理它,它只能移回在同一行它似乎在我看来。请随时提出更多问题,代码如下(抱歉,不是英文):
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)
问题是你永远不会删除错误的号码。数独逐渐被错误的数字填满了。你知道吗
相关问题 更多 >
编程相关推荐