题目大意:编写一个程序解决数独问题,要求填满表中的空白位置,使得其所在的行和列以及所在的宫没有相同元素。
算法思想:
1.遍历该表格,寻找空白位置。
2.对于每个空白位置,枚举放置1~9这9个数字,并判断是否有效且递归深搜。
3.还原空白位置。
4。如果此时没有可行方案返回false
5.遍历完表格返回真。
代码如下:
class Solution {
public:
bool solveSudoku(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 = 0; k < 9;++k){
board[i][j] = k +'1';
if (isValid(board, i, j) && solveSudoku(board))
return true;
board[i][j] ='.';
}
return false;
}
}
}
return true;
}
private:
bool isValid(vector<vector<char> >&board,int x,int y){
for (int i = 0; i < 9;++i)
if (i != x&&board[i][y] == board[x][y])
return false;
for (int j = 0; j < 9;++j)
if (j != y&&board[x][j] == board[x][y])
return false;
for (int i = 3 * (x / 3); i < 3 * (x / 3 + 1);++i){
for (int j = 3 * (y / 3); j < 3 * (y / 3 + 1);++j){
if ((i != x || j != y) && board[x][y]==board[i][j])
return false;
}
}
return true;
}
};