代码随想录:解数独

class Solution {
public:
//竖着x横着y
    void solveSudoku(vector<vector<char>>& board) { rb(board); }

    bool rb(vector<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))continue;
                        board[i][j] = c;
                        if(rb(board))return true;
                        board[i][j] = '.';
                    }
                    return false;
                }
            }
        }
        return true;
    }

    bool isValid(vector<vector<char>>& board, int x, int y, char val) {
        // 横着不重复
        for (int i = 0; i < 9; i++) {
            if (board[x][i] == val)
                return false;
        }

        // 竖着不重复
        for (int i = 0; i < 9; i++) {
            if (board[i][y] == val)
                return false;
        }

        // 九宫格不重复
        x = (x / 3) * 3;
        y = (y / 3) * 3;
        for (int i = x; i < x + 3; i++) {
            for (int j = y; j < y + 3; j++) {
                if (board[i][j] == val)
                    return false;
            }
        }

        return true;
    }
};
posted @ 2025-01-27 17:33  huigugu  阅读(7)  评论(0)    收藏  举报