# this is 9*9 Sudoku grid = [] grid.append([3, 0, 6, 5, 0, 8, 4, 0, 0]) grid.append([5, 2, 0, 0, 0, 0, 0, 0, 0]) grid.append([0, 8, 7, 0, 0, 0, 0, 3, 1]) grid.append([0, 0, 3, 0, 1, 0, 0, 8, 0]) grid.append([9, 0, 0, 8, 6, 3, 0, 0, 5]) grid.append([0, 5, 0, 0, 9, 0, 6, 0, 0]) grid.append([1, 3, 0, 0, 0, 0, 2, 5, 0]) grid.append([0, 0, 0, 0, 0, 0, 0, 7, 4]) grid.append([0, 0, 5, 2, 0, 6, 3, 0, 0]) import turtle t = turtle.Turtle() t.speed(40) def f(k): return -250+50*k def draw_grid(): for k in range(10): if k%3 == 0: t.color('red') t.penup() t.goto(f(k),200) t.pendown() t.goto(f(k),-250) else: t.color('black') t.penup() t.goto(f(k),200) t.pendown() t.goto(f(k),-250) for k in range(10): if k%3 == 0: t.color('red') t.penup() t.goto(-250,f(k)) t.pendown() t.goto(200,f(k)) else: t.color('black') t.penup() t.goto(-250,f(k)) t.pendown() t.goto(200,f(k)) row = 0 column = 0 t.color('black') for row in range(9): for column in range(9): t.penup() t.goto(f(column+0.35),f(8-row + 0.35)) t.pendown() if grid[row][column] != 0: t.write(grid[row][column], font=("Arial", 16, "normal")) def empty_squares(grid): row = 0 column = 0 empty = [] for row in range(9): for column in range(9): if grid[row][column] == 0: empty.append([row,column]) return empty draw_grid() empty = empty_squares(grid) print(empty) #return True if the number not in the row of the grid def number_not_in_row(grid, row, number): for column in range(9): if number == grid[row][column] == number: return False return True print(number_not_in_row(grid, 0, 8)) #return True if the number not in the column of the grid def number_not_in_column(grid, column, number): for row in range(9): if number == grid[row][column] == number: return False return True print(number_not_in_column(grid, 0, 3)) print(number_not_in_column(grid, 0, 8)) #return True if the number not in the box[i,j] of the grid # [0,0] [0,1] # [1,0] [1,1] def number_not_in_box(grid, box, number): for i in range(3): for j in range(3): if number == grid[box[0]*3+i][box[1]*3+j]: return False return True print(number_not_in_box(grid, [0,0], 8)) print(number_not_in_box(grid, [0,0], 1)) #print(number_not_in_box(grid, [1,1], 2)) # input:feasible grid, an empty square, number #return: True if the grid remains feasible if we write number in # the empty square def extend(grid, square, number): if number_not_in_row(grid, square[0], number): if number_not_in_column(grid, square[1], number): if number_not_in_box(grid, [square[0]//3 ,square[1]//3], number): return True return False #print(extend(grid, [1,2],3)) def sudoku(grid, empty): if len(empty) == 0: return True, grid square = empty.pop() for number in range(1,10): if extend(grid, square, number): grid[square[0]][square[1]] = number t.penup() t.color('black') t.goto(f(square[1]+0.35),f(8-square[0] + 0.35)) t.pendown() t.write(number , font=("Arial", 16, "normal")) print(square,"in loop", number) solved, grid = sudoku(grid, empty) if solved: print("in_if_frame_solved") return True, grid else: print("in_if_frame_unsolved") t.penup() t.color('white') t.goto(f(square[1]+0.35),f(8-square[0] + 0.35)) t.pendown() t.write(number , font=("Arial", 16, "normal")) grid[square[0]][square[1]] = 0 empty.append(square) return False, grid #print(empty) sudoku(grid, empty) #print(grid) turtle.done()
浙公网安备 33010602011771号