leecode37.解数独

 自左向右,自上到下,遍历棋盘,只要棋盘当前没有放入数字,那么就从1-9中放入数字进行试探,成功则向下一个空位置试探,试探失败则向上返回,通过这种思路编写回溯程序就行了

class Solution{
private:
    bool judge(vector>& board,int row,int col,char num){
        //判断当前行数字是否只出现了一次
        for(int j=0;j<9;j++)
            if(board[row][j]==num)
                return false;
        //判断当前列数字是否只出现一次
        for(int i=0;i<9;i++)
            if(board[i][col]==num)
                return false;
        //判断当前3x3宫内数字书否只出现一次
        int startRow=row/3*3;
        int startCol=col/3*3;
        for(int i=startRow;i>& board){
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                if(board[i][j]=='.'){
                    for(char num='1';num<='9';num++){
                        if(judge(board,i,j,num)){
                            board[i][j]=num;
                            if(mySolveSudoku(board))
                                return true;
                            board[i][j]='.';
                        }
                    }
                    return false;
                }
            }
        }
        return true;
    }
public:
    void solveSudoku(vector>& board) {
        mySolveSudoku(board);
    }
};

你可能感兴趣的:(算法)