解数独
class Solution {
public:
bool huisu(vector<vector<char>>& board, vector<vector<int>>& hang,
vector<vector<int>>& lie, vector<vector<int>>& box, int x, int y)
{
if (y ==9)//必须设定条件让不满足条件的不能进来的
{
y = 0;
++x;
if (x ==9)
return true;
}
int box_num = x / 3 * 3 + y / 3;
if (board[x][y] == '.')
{
for (int i = 1; i <= 9; ++i)//选择能够选的数字
{
if (hang[x][i] == 0 && lie[y][i] == 0 && box[box_num][i] == 0)
{
board[x][y] = i + '0';
hang[x][i] = 1;
lie[y][i] = 1;
box[box_num][i] = 1;
if (huisu(board, hang, lie, box, x, y+1))
return true;
board[x][y] = '.';
hang[x][i] = 0;
lie[y][i] = 0;
box[box_num][i] = 0;
}
}
}
else
return huisu(board, hang, lie, box, x, y+1);
return false;
}
/*
int hang[9][10] = { 0 };
int lie[9][10] = { 0 };
int box[9][10] = { 0 };
*/
void solveSudoku(vector<vector<char>>& board) {
vector<vector<int>> hang(9, vector<int>(10, 0));
vector<vector<int>> lie(9, vector<int>(10, 0));
vector<vector<int>> box(9, vector<int>(10, 0));
int x = 0;
int y = 0;
for (int i = 0; i < 9; ++i)
{
for(int j=0;j<9;++j)
if (board[i][j] >= '1'&&board[i][j] <= '9')
{
int num = board[i][j] - '0';
hang[i][num] = 1;
lie[j][num] = 1;
box[i / 3 * 3 + j / 3][num] = 1;
}
}
huisu(board, hang, lie, box, x, y);
}
};