-
Notifications
You must be signed in to change notification settings - Fork 0
/
Sudoku_solver.py
85 lines (80 loc) · 1.54 KB
/
Sudoku_solver.py
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
a = [[0, 0, 2, 0, 0, 0, 0, 3, 0],
[3, 0, 0, 9, 0, 2, 7, 0, 0],
[8, 1, 0, 0, 6, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 2, 7, 0],
[0, 7, 0, 5, 4, 8, 0, 1, 0],
[0, 3, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 2, 0, 0, 6, 9],
[0, 0, 8, 6, 0, 5, 0, 0, 1],
[0, 4, 0, 0, 0, 0, 5, 0, 0]];
f=0
for i in range(9):
print(a[i])
print()
def valid(i,k,l):
for j in range(3):
if(k<(3*(j+1))):
m1=(3*(j+1))
m=(3*(j+1))-3
break
for j in range(3):
if(l<(3*(j+1))):
n1=(3*(j+1))
n=(3*(j+1))-3
break
n0=n
for j in range(9):
if(j!=l)and(a[k][j]==i):
return 0
for j in range(9):
if(j!=k)and(a[j][l]==i):
return 0
while(m<m1):
while(n<n1):
if(m!=k)and(n!=l)and(a[m][n]==i):
return 0
n+=1
m+=1
n=n0
return 1
def input_checker():
for i in range(9):
for j in range(9):
if(a[i][j]!=0):
if(valid(a[i][j],i,j)==0):
return 0
return 1
def min_sudo(k,l):
global f
if(k==9):
for j in range(9):
print(a[j])
f+=1
return
else:
if(a[k][l]==0):
d=1
while(d<=9):
if(valid(d,k,l)==0):
d+=1
continue
a[k][l]=d
if(l==8):
min_sudo(k+1,0)
else:
min_sudo(k,l+1)
if(f==1):
return
d+=1
a[k][l]=0
else:
if(l==8):
min_sudo(k+1,0)
else:
min_sudo(k,l+1)
if(f==1):
return
if(input_checker()!=0):
min_sudo(0,0)
if(f==0):
print("No solution exists")