037 Sudoku Solver

037 Sudoku Solver

这道题我纯暴力搜了 肯定可以优化, 懒得去看了。。。

class Solution:
    def __init__(self):
        self.b = []
    
    def solveSudoku(self, board):
        self.b = board[:]
        self.solve(0, 0)
        for i in range(0,9):
            for j in range(0,9):
                board[i][j] = self.b[i][j]
        

    def solve(self, i, j):
        if j >= 9:
            return self.solve(i+1, 0)
        if i == 9:
            return True
        if self.b[i][j] == '.':
            for k in range(1, 10):
                self.b[i][j] = str(k)
                if self.isValid(i, j):
                    if self.solve(i, j+1):
                        return True
                self.b[i][j] = '.'
        else:
            return self.solve(i, j+1)
        return False

    def isValid(self, i, j):
        for k in range(0,9):
            if k != j and self.b[i][k] == self.b[i][j]:
                return False
            if k != i and self.b[k][j] == self.b[i][j]:
                return False
        for r in range(i/3*3, i/3*3+3):
            for c in range(j/3*3, j/3*3+3):
                if (r != i or c != j) and self.b[r][c] == self.b[i][j]:
                    return False
        return True
        

 

posted @ 2015-08-01 01:50  dapanshe  阅读(108)  评论(0编辑  收藏  举报