Skip to content

Commit d201eb6

Browse files
authored
Add files via upload
1 parent 60f95da commit d201eb6

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
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

Comments
 (0)