您的位置:首页 > 其它

[LeetCode] Sudoku Solver

2015-09-08 17:35 399 查看
Just don't be scared by this problem :-) It's also very standard backtracking problem. This post shares a very concise code, which is rewritten below in C++.

class Solution {
public:
void solveSudoku(vector<vector<char>>& board) {
solve(board);
}
private:
bool solve(vector<vector<char>>& board) {
for (int r = 0; r < 9; r++) {
for (int c = 0; c < 9; c++) {
if (board[r][c] == '.') {
for (char d = '1'; d <= '9'; d++) {
if (isValid(board, r, c, d)) {
board[r][c] = d;
if (solve(board)) return true;
board[r][c] = '.';
}
}
return false;
}
}
}
return true;
}
bool isValid(vector<vector<char>>& board, int r, int c, char d) {
for (int row = 0; row < 9; row++)
if (board[row][c] == d) return false;
for (int col = 0; col < 9; col++)
if (board[r][col] == d) return false;
for (int row = (r / 3) * 3; row < (r / 3 + 1) * 3; row++)
for (int col = (c / 3) * 3; col < (c / 3 + 1) * 3; col++)
if (board[row][col] == d) return false;
return true;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: