-
Notifications
You must be signed in to change notification settings - Fork 122
/
sudoko.java
132 lines (115 loc) · 3.67 KB
/
sudoko.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Java program for above approach
import java.util.*;
class Sudoko {
// N is the size of the 2D matrix N*N
static int N = 9;
/* Takes a partially filled-in grid and attempts
to assign values to all unassigned locations in
such a way to meet the requirements for
Sudoku solution (non-duplication across rows,
columns, and boxes) */
static boolean solveSuduko(int grid[][], int row,
int col)
{
/*if we have reached the 8th
row and 9th column (0
indexed matrix) ,
we are returning true to avoid further
backtracking */
if (row == N - 1 && col == N)
return true;
// Check if column value becomes 9 ,
// we move to next row
// and column start from 0
if (col == N) {
row++;
col = 0;
}
// Check if the current position
// of the grid already
// contains value >0, we iterate
// for next column
if (grid[row][col] != 0)
return solveSuduko(grid, row, col + 1);
for (int num = 1; num < 10; num++) {
// Check if it is safe to place
// the num (1-9) in the
// given row ,col ->we move to next column
if (isSafe(grid, row, col, num)) {
/* assigning the num in the current
(row,col) position of the grid and
assuming our assined num in the position
is correct */
grid[row][col] = num;
// Checking for next
// possibility with next column
if (solveSuduko(grid, row, col + 1))
return true;
}
/* removing the assigned num , since our
assumption was wrong , and we go for next
assumption with diff num value */
grid[row][col] = 0;
}
return false;
}
/* A utility function to print grid */
static void print(int[][] grid)
{
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
System.out.print(grid[i][j] + " ");
System.out.println();
}
}
// Check whether it will be legal
// to assign num to the
// given row, col
static boolean isSafe(int[][] grid, int row, int col,
int num)
{
// Check if we find the same num
// in the similar row , we
// return false
for (int x = 0; x <= 8; x++)
if (grid[row][x] == num)
return false;
// Check if we find the same num
// in the similar column ,
// we return false
for (int x = 0; x <= 8; x++)
if (grid[x][col] == num)
return false;
// Check if we find the same num
// in the particular 3*3
// matrix, we return false
int startRow = row - row % 3, startCol
= col - col % 3;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (grid[i + startRow][j + startCol] == num)
return false;
return true;
}
// Driver Code
public static void main(String[] args)
{ Scanner sc=new Scanner(System.in);
int grid[][] = new int [9][9];
sudukogen sudukogen=new sudukogen(9,25);
sudukogen.fillValues();
sudukogen.printSudoku();
grid=sudukogen.getmat();
/** for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
grid[i][j]=sc.nextInt();
}
}**/
if (solveSuduko(grid, 0, 0))
print(grid);
else
System.out.println("No Solution exists");
}
// This is code is contributed by Pradeep Mondal P
}