1
+ // { Driver Code Starts
2
+ #include < bits/stdc++.h>
3
+ using namespace std ;
4
+
5
+
6
+ // } Driver Code Ends
7
+
8
+
9
+ class Solution {
10
+ public:
11
+ // Function to find a solved Sudoku.
12
+ bool solve (int i, int j, vector<vector<int >>& board, vector<vector<bool >> &row, vector<vector<bool >> &col, vector<vector<bool >> &sub_box){
13
+ if (i==9 ) return true ;
14
+ if (j==9 ) return solve (i+1 , 0 , board, row, col, sub_box);
15
+ if (board[i][j]!=0 )return solve (i, j+1 , board, row, col, sub_box);
16
+
17
+ for (int num=1 ; num<=9 ; num++){
18
+ int box_no = (i/3 )*3 +(j/3 );
19
+
20
+ if (row[i][num]==0 && col[j][num]==0 && sub_box[box_no][num]==0 ){
21
+ row[i][num] = 1 ;
22
+ col[j][num] = 1 ;
23
+ sub_box[box_no][num] = 1 ;
24
+ board[i][j] = num;
25
+
26
+ if (solve (i, j+1 , board, row, col, sub_box)) return true ;
27
+
28
+ row[i][num] = 0 ;
29
+ col[j][num] = 0 ;
30
+ sub_box[box_no][num] = 0 ;
31
+ board[i][j] = 0 ;
32
+ }
33
+ }
34
+
35
+ return false ;
36
+ }
37
+
38
+ bool solveSudoku (vector<vector<int >>& board) {
39
+ vector<vector<bool >> sub_box (9 , vector<bool > (9 +1 , false ));
40
+ vector<vector<bool >> col (9 , vector<bool > (9 +1 , false ));
41
+ vector<vector<bool >> row (9 , vector<bool > (9 +1 , false ));
42
+
43
+ for (int i=0 ; i<9 ; i++)
44
+ for (int j=0 ; j<9 ; j++)
45
+ if (board[i][j]!=0 ){
46
+ int num = board[i][j];
47
+ int box_no = (i/3 )*3 + j/3 ;
48
+
49
+ row[i][num] = 1 ;
50
+ col[j][num] = 1 ;
51
+ sub_box[box_no][num] = 1 ;
52
+ }
53
+
54
+ if (solve (0 , 0 , board, row, col, sub_box)) return true ;
55
+ return false ;
56
+ }
57
+ };
58
+
59
+ // { Driver Code Starts.
60
+
61
+ vector<int > inputLine () {
62
+ string str;
63
+ getline (cin, str);
64
+ stringstream ss (str);
65
+ int num;
66
+ vector<int > res;
67
+ while (ss >> num) {
68
+ res.push_back (num);
69
+ }
70
+ return res;
71
+ }
72
+
73
+ int main () {
74
+ int t;
75
+ cin >> t;
76
+ cin.ignore ();
77
+ while (t--) {
78
+ vector<vector<int >> grid;
79
+ for (int i = 0 ; i < 9 ; i++) {
80
+ vector<int > v = inputLine ();
81
+ grid.push_back (v);
82
+ }
83
+
84
+ Solution ob;
85
+
86
+ ob.solveSudoku (grid);
87
+
88
+ for (auto v : grid) {
89
+ for (auto elem : v) {
90
+ cout << elem << " " ;
91
+ }
92
+ cout << endl;
93
+ }
94
+
95
+ cout << " ~" << endl;
96
+ }
97
+ return 0 ;
98
+ }
99
+ // } Driver Code Ends
0 commit comments