class Sukudo: def __init__(self,puzzle): self.puzzle = puzzle self.sukudoBoard = puzzle def printSukudoBoard(self): for i in range(9): for j in range(9): print('{}'.format(self.sukudoBoard[i][j]), end=" ") print() def checkValid(self, i, j, val): for k in range(9): if k != j and self.sukudoBoard[i][k] == val: return False if k != i and self.sukudoBoard[k][j] == val: return False subX = int(i / 3) * 3 subY = int(j / 3) * 3 for p in range(subX, subX + 3): for q in range(subY, subY + 3): if p != i and q != j and self.sukudoBoard[p][q] == val: return False return True def setSukudoBoard(self, x, y): if y > 8: y = 0 x += 1 if x > 8: return True if self.puzzle[x][y] != 0: if self.setSukudoBoard(x, y + 1): return True else: self.sukudoBoard[x][y] = self.puzzle[x][y] return False for val in range(1, 10): if self.checkValid(x, y, val) is True: self.sukudoBoard[x][y] = val if self.setSukudoBoard(x, y + 1): return True self.sukudoBoard[x][y] = 0 return False if __name__ == '__main__': puzzle = ''' 000600000 006730590 083010700 040107003 000300900 900008000 000000001 009000006 700801040 ''' puzzle = [ [int(l) for l in k] for k in [list(j) for j in [i.strip() for i in puzzle.split("\n") if i.strip()]]] s = Sukudo(puzzle) if s.setSukudoBoard(0,0): s.printSukudoBoard() else: print("该数独无解")
|