Skip to content

Commit 5b1d601

Browse files
Merge pull request #115 from ashish1500616/SudokuAlgorithmBacktracking
#7 Backtracking Algorithm's Add Sudoku Algorithm In Cpp.
2 parents 09e8e34 + 9bd5e7f commit 5b1d601

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
#include <stdio.h>
2+
3+
#define UNASSIGNED 0
4+
5+
#define N 9
6+
7+
bool FindUnassignedLocation(int grid[N][N], int& row, int& col);
8+
9+
bool isSafe(int grid[N][N], int row, int col, int num);
10+
11+
bool SolveSudoku(int grid[N][N])
12+
{
13+
int row, col;
14+
15+
if (!FindUnassignedLocation(grid, row, col))
16+
return true;
17+
18+
for (int num = 1; num <= 9; num++) {
19+
20+
if (isSafe(grid, row, col, num)) {
21+
22+
grid[row][col] = num;
23+
24+
if (SolveSudoku(grid))
25+
return true;
26+
27+
grid[row][col] = UNASSIGNED;
28+
}
29+
}
30+
return false;
31+
}
32+
33+
bool FindUnassignedLocation(int grid[N][N], int& row, int& col)
34+
{
35+
for (row = 0; row < N; row++)
36+
for (col = 0; col < N; col++)
37+
if (grid[row][col] == UNASSIGNED)
38+
return true;
39+
return false;
40+
}
41+
42+
bool UsedInRow(int grid[N][N], int row, int num)
43+
{
44+
for (int col = 0; col < N; col++)
45+
if (grid[row][col] == num)
46+
return true;
47+
return false;
48+
}
49+
50+
bool UsedInCol(int grid[N][N], int col, int num)
51+
{
52+
for (int row = 0; row < N; row++)
53+
if (grid[row][col] == num)
54+
return true;
55+
return false;
56+
}
57+
58+
bool UsedInBox(int grid[N][N], int boxStartRow, int boxStartCol, int num)
59+
{
60+
for (int row = 0; row < 3; row++)
61+
for (int col = 0; col < 3; col++)
62+
if (grid[row + boxStartRow][col + boxStartCol] == num)
63+
return true;
64+
return false;
65+
}
66+
67+
bool isSafe(int grid[N][N], int row, int col, int num)
68+
{
69+
70+
return !UsedInRow(grid, row, num) && !UsedInCol(grid, col, num) && !UsedInBox(grid, row - row % 3, col - col % 3, num);
71+
}
72+
73+
void printGrid(int grid[N][N])
74+
{
75+
for (int row = 0; row < N; row++) {
76+
for (int col = 0; col < N; col++)
77+
printf("%2d", grid[row][col]);
78+
printf("\n");
79+
}
80+
}
81+
82+
int main()
83+
{
84+
85+
int grid[N][N] = { { 3, 0, 6, 5, 0, 8, 4, 0, 0 },
86+
{ 5, 2, 0, 0, 0, 0, 0, 0, 0 },
87+
{ 0, 8, 7, 0, 0, 0, 0, 3, 1 },
88+
{ 0, 0, 3, 0, 1, 0, 0, 8, 0 },
89+
{ 9, 0, 0, 8, 6, 3, 0, 0, 5 },
90+
{ 0, 5, 0, 0, 9, 0, 6, 0, 0 },
91+
{ 1, 3, 0, 0, 0, 0, 2, 5, 0 },
92+
{ 0, 0, 0, 0, 0, 0, 0, 7, 4 },
93+
{ 0, 0, 5, 2, 0, 6, 3, 0, 0 } };
94+
if (SolveSudoku(grid) == true)
95+
printGrid(grid);
96+
else
97+
printf("No solution exists");
98+
99+
return 0;
100+
}

0 commit comments

Comments
 (0)