-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSudoku-Solver.cpp
52 lines (47 loc) · 1.39 KB
/
Sudoku-Solver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Solution
{
public:
const int N = 9;
bool dfs(vector<vector<char>> &board, int x, int y)
{
if (x == N)
return true;
if (board[x][y] != '.')
{
return dfs(board, (y == N - 1 ? x + 1 : x), (y == N - 1 ? 0 : y + 1));
}
else
{
for (int i = 1; i <= N; i++)
{
bool flag = true;
for (int j = 0; j < N; j++)
if (board[x][j] - '0' == i || board[j][y] - '0' == i)
{
flag = false;
break;
};
int leftx = x / 3 * 3, lefty = y / 3 * 3;
for (int j = leftx; j <= leftx + 2; j++)
for (int k = lefty; k <= lefty + 2; k++)
if (board[j][k] - '0' == i)
{
flag = false;
break;
};
if (!flag)
continue;
board[x][y] = char(i + '0');
if (dfs(board, (y == N - 1 ? x + 1 : x), (y == N - 1 ? 0 : y + 1)))
return true;
else
board[x][y] = '.';
};
return false;
};
};
void solveSudoku(vector<vector<char>> &board)
{
dfs(board, 0, 0);
}
};