37. Sudoku Solver

发布于:2025-06-01 ⋅ 阅读:(87) ⋅ 点赞:(0)

题目描述

37. Sudoku Solver

回溯

class Solution {
    vector<vector<bool>> row_used;
    vector<vector<bool>> col_used;
    vector<vector<bool>> box_used;

public:
    void solveSudoku(vector<vector<char>>& board) {
        row_used.resize(9,vector<bool>(9,false));
        col_used.resize(9,vector<bool>(9,false));
        box_used.resize(9,vector<bool>(9,false));
        for(int row= 0;row < 9;row++){
            for(int col = 0;col < 9;col++){
                if(board[row][col] != '.'){
                    int digit = board[row][col] - '0' -1;
                    row_used[row][digit] = true;
                    col_used[col][digit] = true;
                    box_used[(row/3)*3 + col/3][digit] = true;
                }
            }
        }
        backtrack(board);
    }

    bool backtrack(vector<vector<char>>& board){
        for(int row = 0;row < 9;row++){
            for(int col = 0;col < 9;col++){
                if(board[row][col] != '.')
                    continue;
                for(int digit = 0;digit<9;digit++){
                    if(row_used[row][digit])
                        continue;
                    if(col_used[col][digit])
                        continue;
                    if(box_used[(row/3)*3+ col/3][digit])
                        continue;
                    row_used[row][digit] = true;
                    col_used[col][digit] = true;
                    box_used[(row/3)*3+ col/3][digit] = true;
                    board[row][col] = '0'+ digit + 1;
                    if(backtrack(board)) return true;
                    board[row][col] = '.';
                    row_used[row][digit] = false;
                    col_used[col][digit] = false;
                    box_used[(row/3)*3+ col/3][digit] = false;
                }
                return false;
            }
        }
        return true;
    }
};

网站公告

今日签到

点亮在社区的每一天
去签到