Skip to content

Commit 41e9165

Browse files
committed
3
1 parent 53145ec commit 41e9165

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

SudokuSolver/SudokuSolver.cpp

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Solution {
2+
public:
3+
bool visited_cells[20][20];
4+
bool visited_row[20][20];
5+
bool visited_col[20][20];
6+
7+
void solveSudoku(vector<vector<char>>& board) {
8+
// Start typing your C/C++ solution below
9+
// DO NOT write int main() function
10+
11+
memset(visited_cells, false, sizeof(visited_cells));
12+
memset(visited_row, false, sizeof(visited_row));
13+
memset(visited_col, false, sizeof(visited_col));
14+
15+
for (int i = 0; i < 9; i++) {
16+
for (int j = 0; j < 9; j++) {
17+
if (board[i][j] != '.') {
18+
int cell = (i / 3) * 3 + j / 3;
19+
int x = board[i][j] - '0';
20+
visited_cells[cell][x] = true;
21+
visited_row[i][x] = visited_col[j][x] = true;
22+
}
23+
}
24+
}
25+
26+
isValidSudokuHelper(board, 0);
27+
}
28+
29+
bool isValidSudokuHelper(vector<vector<char>>& board, int step) {
30+
if (step == 81) return true;
31+
32+
int row = step / 9;
33+
int col = step % 9;
34+
int cell = (row / 3) * 3 + col / 3;
35+
36+
if (board[row][col] != '.') {
37+
return isValidSudokuHelper(board, step + 1);
38+
}
39+
for (int i = 1; i <= 9; i++) {
40+
if (!visited_cells[cell][i] && !visited_row[row][i] && !visited_col[col][i]) {
41+
visited_cells[cell][i] = true;
42+
visited_row[row][i] = visited_col[col][i] = true;
43+
board[row][col] = '0' + i;
44+
bool flag = isValidSudokuHelper(board, step + 1);
45+
if (flag) return true;
46+
board[row][col] = '.';
47+
visited_cells[cell][i] = false;
48+
visited_row[row][i] = visited_col[col][i] = false;
49+
}
50+
}
51+
return false;
52+
}
53+
};
54+

0 commit comments

Comments
 (0)