# Sudoku Solver : 53 lines and 12 ms

323人阅读 评论(0)

class Solution {
public:
bool helper(int r, int c, int mpRow[][9], int mpCol[][9], int mpGroup[][9], vector<vector<char> >& board) {
if (r >= 9) {
return true;
}
if (c >= 9){
c = 0;
if (helper(r+1, c, mpRow, mpCol, mpGroup, board))
return true;
return false;
}
if (board[r][c] != '.'){
if (helper(r, c+1, mpRow, mpCol, mpGroup, board))
return true;
return false;
}
for (int i = 0; i < 9; ++ i) {
int are = r/3*3+c/3;
if (board[r][c] == '.' && isValidNum(mpRow[r], mpCol[c], mpGroup[are], i)) {
board[r][c] = '1' + i;
mpRow[r][i] = mpCol[c][i] = mpGroup[are][i] = 1;
if (helper(r, c+1, mpRow, mpCol, mpGroup, board))
return true;
board[r][c] = '.';
mpRow[r][i] = mpCol[c][i] = mpGroup[are][i] = 0;
}
}
return false;
}

bool isValidNum(int *mpRow, int *mpCol, int *mpGroup, int num) {
if (mpRow[num] == 0 && mpCol[num] == 0 && mpGroup[num] == 0)
return true;
return false;
}

void solveSudoku(vector<vector<char> >& board) {
int mpRow[9][9] = {{0}};
int mpCol[9][9] = {{0}};
int mpGroup[9][9] = {{0}};
for (int i = 0; i < 9; ++ i) {
for (int j = 0; j < 9; ++ j) {
char c = board[i][j];
if (c == '.')
continue;
mpRow[i][c-'1'] = 1;
mpCol[j][c-'1'] = 1;
mpGroup[i/3*3+j/3][c-'1'] = 1;
}
}
helper(0, 0, mpRow, mpCol, mpGroup, board);
}
};

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：37847次
• 积分：893
• 等级：
• 排名：千里之外
• 原创：48篇
• 转载：1篇
• 译文：0篇
• 评论：6条
文章分类
评论排行
最新评论