题目:
Write a program to solve a Sudoku puzzle by filling the empty cells.
Empty cells are indicated by the character '.'
.
You may assume that there will be only one unique solution.
A sudoku puzzle...
...and its solution numbers marked in red.
class Solution {
public:
void solveSudoku(vector<vector<char> > &board) {
dfs(board);
}
private:
bool isValid(vector<vector<char> > &board, int x, int y) {
//判断此行
for(int j = 0; j < 9; j++)
if(j != y && board[x][j] == board[x][y])
return false;
//判断此列
for(int i = 0; i < 9; i++)
if(i != x && board[i][y] == board[x][y])
return false;
//判断sub
int a = x/3*3;
int b = y/3*3;
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
if(a+i != x && b+j != y && board[a+i][b+j] == board[x][y])
return false;
return true;
}
bool dfs(vector<vector<char> > &board) {
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
if(board[i][j] == '.') {
for(int k = '1'; k <= '9'; k++) {
board[i][j] = k;
if(isValid(board, i, j) && dfs(board))
return true;
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
};