Sudoku Solver : 53 lines and 12 ms

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);
}
};

• 本文已收录于以下专栏：

leetcode系列（53）Sudoku Solver

Write aprogram to solve a Sudoku puzzle by filling the empty cells. Emptycells are indicated by the...
• macchan
• 2015年10月31日 21:20
• 172

Valid Sudoku

Valid Sudoku and Sudoku Solver

Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.The Sudoku board could be p...
• pupuzay
• 2015年10月15日 10:04
• 105

Sudoku solver in C++ (数独计算器)

• 2011年02月08日 23:20
• 408KB
• 下载

LeetCode OJ:Sudoku Solver

Sudoku Solver   Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells ...

Leetcode Sudoku Solver My Submissions Question

Leetcode Sudoku Solver My Submissions Question ，本问题主要是使用递归的思想，不断的试探，直到得出结果，同时也得注意记录已有值的方法，主要是横向、纵向、...

Leetcode-Sudoku Solver

Write a program to solve a Sudoku puzzle by filling the empty cells.Empty cells are indicated by the...

举报原因： 您举报文章：Sudoku Solver : 53 lines and 12 ms 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)