Witam wszystkich,
W moim kodzie mam gdzieś błąd, wydaje mi się że w ostatniej funkcji, chyba brakuje mi jakiegoś ifa? Proszę o pomoc - wskazanie miejsca błędu.
Miałem w pliku zapisać sudoku a w miejscach pustych wstawiać 0, potem wczytać plik, wskazać indeksy miejsc z zerami, dla każdego indeksu przyporządkować możliwe rozwiązania i rozwiazać sudoku. W 1 wierszu Wstawia u mnie cyfry po kolei, na 9 miejscu zostaje mi jedynie 9 do wyboru, ale tam nie może być, więc program zostawia 0 i kończy pracę. Wklejam kod oraz przykładowy plik.txt z sudoku.
Proszę o pomoc, pozdrawiam
with open ('sudoku.txt','r') as sudoku:
a=[]
for x in range(0,9):
b = []
for i in sudoku.readline().strip():
i = int(i)
b.append(i)
a.append(b)
if len(b) != 9:
print 'NIEPOPRAWNE DANE'
break
def anyunknowns(tablica):
for wiersz in tablica:
for x in wiersz:
if x == 0:
return True
return False
def findunknown(tablica):
for i in range(0,9):
for j in range(0,9):
if tablica[i][j] == 0:
return i,j
def findoknumbers(grid,i,j):
list1 = []
for n in range(1,10):
isok = True
for x in range(9):
if grid[i][x] == n:
isok = False
for x in range(9):
if grid[x][j] == n:
isok = False
for p in range(3*(i//3),3*(i//3)+3):
for q in range(3*(j//3),3*(j//3)+3):
if grid[p][q] == n:
isok = False
if isok == True:
list1.append(n)
return list1
def solve_sudoku(a):
for wiersz in a:
print wiersz
print "---"
if anyunknowns(a):
i,j=findunknown(a)
numbers=findoknumbers(a,i,j)
if numbers == []:
return False
else:
print i,j,numbers
for n in numbers:
anew = a
anew[i][j] = n
solution = solve_sudoku(anew)
if (solution == False) and (n == numbers[-1]):
return False
else:
return solution
else:
return a
print solve_sudoku(a)
Na wszelki wypadek treść mojego pliku sudoku.txt
005000800
040209060
600070009
090605010
002000400
060704050
800060001
070408020
009000600