1+ #include < bits/stdc++.h>
2+ using namespace std ;
3+
4+ #define UNASSIGNED 0
5+
6+ #define N 9
7+
8+
9+ bool FindUnassignedLocation (int grid[N][N],
10+ int &row, int &col);
11+
12+
13+ bool isSafe (int grid[N][N], int row,
14+ int col, int num);
15+
16+
17+ bool SolveSudoku (int grid[N][N])
18+ {
19+ int row, col;
20+
21+
22+ if (!FindUnassignedLocation (grid, row, col))
23+ return true ;
24+ for (int num = 1 ; num <= 9 ; num++)
25+ {
26+
27+ if (isSafe (grid, row, col, num))
28+ {
29+
30+ grid[row][col] = num;
31+
32+
33+ if (SolveSudoku (grid))
34+ return true ;
35+
36+
37+ grid[row][col] = UNASSIGNED;
38+ }
39+ }
40+ return false ;
41+ }
42+
43+
44+ bool FindUnassignedLocation (int grid[N][N],
45+ int &row, int &col)
46+ {
47+ for (row = 0 ; row < N; row++)
48+ for (col = 0 ; col < N; col++)
49+ if (grid[row][col] == UNASSIGNED)
50+ return true ;
51+ return false ;
52+ }
53+
54+
55+ bool UsedInRow (int grid[N][N], int row, int num)
56+ {
57+ for (int col = 0 ; col < N; col++)
58+ if (grid[row][col] == num)
59+ return true ;
60+ return false ;
61+ }
62+
63+
64+ bool UsedInCol (int grid[N][N], int col, int num)
65+ {
66+ for (int row = 0 ; row < N; row++)
67+ if (grid[row][col] == num)
68+ return true ;
69+ return false ;
70+ }
71+
72+
73+ bool UsedInBox (int grid[N][N], int boxStartRow,
74+ int boxStartCol, int num)
75+ {
76+ for (int row = 0 ; row < 3 ; row++)
77+ for (int col = 0 ; col < 3 ; col++)
78+ if (grid[row + boxStartRow]
79+ [col + boxStartCol] == num)
80+ return true ;
81+ return false ;
82+ }
83+
84+
85+ bool isSafe (int grid[N][N], int row,
86+ int col, int num)
87+ {
88+
89+ return !UsedInRow (grid, row, num) &&
90+ !UsedInCol (grid, col, num) &&
91+ !UsedInBox (grid, row - row % 3 ,
92+ col - col % 3 , num) &&
93+ grid[row][col] == UNASSIGNED;
94+ }
95+
96+
97+ void printGrid (int grid[N][N])
98+ {
99+ for (int row = 0 ; row < N; row++)
100+ {
101+ for (int col = 0 ; col < N; col++)
102+ cout << grid[row][col] << " " ;
103+ cout << endl;
104+ }
105+ }
106+
107+ // Driver Code
108+ int main ()
109+ {
110+ // 0 means unassigned cells
111+ int grid[N][N] = {{3 , 0 , 6 , 5 , 0 , 8 , 4 , 0 , 0 },
112+ {5 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },
113+ {0 , 8 , 7 , 0 , 0 , 0 , 0 , 3 , 1 },
114+ {0 , 0 , 3 , 0 , 1 , 0 , 0 , 8 , 0 },
115+ {9 , 0 , 0 , 8 , 6 , 3 , 0 , 0 , 5 },
116+ {0 , 5 , 0 , 0 , 9 , 0 , 6 , 0 , 0 },
117+ {1 , 3 , 0 , 0 , 0 , 0 , 2 , 5 , 0 },
118+ {0 , 0 , 0 , 0 , 0 , 0 , 0 , 7 , 4 },
119+ {0 , 0 , 5 , 2 , 0 , 6 , 3 , 0 , 0 }};
120+ if (SolveSudoku (grid) == true )
121+ printGrid (grid);
122+ else
123+ cout << " No solution exists" ;
124+
125+ return 0 ;
126+ }
0 commit comments