1. 程式人生 > >leetcode 37:解數獨

leetcode 37:解數獨

bool isValid(std::vector<std::vector<char>>& board,int row,int col,char c)
{
    for(int i=0;i<9;i++){
        if(board[row][i]==c)return false;
        if(board[i][col]==c)return false;
    }
    int r1=row/3;
    int l1=col/3;
    for(int j=0;j<3;j++){
        for(int k=0;k<3;k++){
            if(board[3*r1+j][3*l1+k]==c)
                return false;
        }
    }
    return true;
}

bool solve1(std::vector<std::vector<char>> &board){
    for(int i=0;i<9;i++){
        for(int j=0;j<9;j++){
            if(board[i][j]=='.'){
                for(char c='1';c<='9';c++){
                    if(isValid(board,i,j,c)){
                        board[i][j]=c;
                        if(solve1(board))return true;
                        else
                            board[i][j]='.';
                    }
                }
                return false;
            }
        }
    }
    return true;
}

void solveSudoku(std::vector<std::vector<char>>& board) {
    solve1(board);
}