Sudoku Solver

LeetCode #37


Description:

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character '.'.

You may assume that there will be only one unique solution.

Example:

Note

Idea:

每个空格试一个值,然后再往下试,如果有conflict,就不成功,如果没有conflict,就是一个成功解。

Code:

class Solution {
public:
    void solveSudoku(vector<vector<char>>& board) {
        solveSudokuDFS(board, 0, 0);
    }

    bool solveSudokuDFS(vector<vector<char>>& board, int row, int column){
        int N=9;
        int i=row;
        int j;
        for(; i<N; ++i){
            if(i==row) j=column;
            else j=0;
            for(; j<N; ++j){
                if(board[i][j]=='.'){
                    for(int k=0; k<N; ++k){
                        board[i][j]=k+'1';
                        // this loc is good, the remaining are good as well
                        if(isValid(board, i, j) && solveSudokuDFS(board, i, j)){
                            return true;
                        }
                        board[i][j]='.';
                    }
                    return false;
                }
            }
        }
        return true;
    }

    bool isValid(vector<vector<char>>& board, int row, int column){
        int N=9;
        for(int i=0; i<N; ++i){
            if(i!=row && board[i][column]==board[row][column])
                return false;
        }
        for(int j=0; j<N; ++j){
            if(j!=column && board[row][j]==board[row][column])
                return false;
        }
        for(int i=3*(row/3); i<3*(row/3+1); ++i){
            for(int j=3*(column/3); j<3*(column/3+1); ++j){
                if((i!=row || j!=column) && board[i][j]==board[row][column])
                    return false;
            }
        }

        return true;
    }
};

results matching ""

    No results matching ""