N = 9
def printing(arr):
for i in range(N):
for j in range(N):
print(arr[i][j], end = " ")
print()
def isSafe(grid, row, col, num):
for x in range(9):
if grid[row][x] == num:
return False
for x in range(9):
if grid[x][col] == num:
return False
startRow = row - row % 3
startCol = col - col % 3
for i in range(3):
for j in range(3):
if grid[i + startRow][j + startCol] == num:
return False
return True
def solveSudoku(grid, row, col):
if (row == N - 1 and col == N):
return True
if col == N:
row += 1
col = 0
if grid[row][col] > 0:
return solveSudoku(grid, row, col + 1)
for num in range(1, N + 1, 1):
if isSafe(grid, row, col, num):
grid[row][col] = num
if solveSudoku(grid, row, col + 1):
return True
grid[row][col] = 0
return False
grid = [[3, 0, 6, 5, 0, 8, 4, 0, 0],
[5, 2, 0, 0, 0, 0, 0, 0, 0],
[0, 8, 7, 0, 0, 0, 0, 3, 1],
[0, 0, 3, 0, 1, 0, 0, 8, 0],
[9, 0, 0, 8, 6, 3, 0, 0, 5],
[0, 5, 0, 0, 9, 0, 6, 0, 0],
[1, 3, 0, 0, 0, 0, 2, 5, 0],
[0, 0, 0, 0, 0, 0, 0, 7, 4],
[0, 0, 5, 2, 0, 6, 3, 0, 0]]
if (solveSudoku(grid, 0, 0)):
printing(grid)
else:
print("no solution exists ")
TiA9IDkKZGVmIHByaW50aW5nKGFycik6Cglmb3IgaSBpbiByYW5nZShOKToKCQlmb3IgaiBpbiByYW5nZShOKToKCQkJcHJpbnQoYXJyW2ldW2pdLCBlbmQgPSAiICIpCgkJcHJpbnQoKQpkZWYgaXNTYWZlKGdyaWQsIHJvdywgY29sLCBudW0pOgoJZm9yIHggaW4gcmFuZ2UoOSk6CgkJaWYgZ3JpZFtyb3ddW3hdID09IG51bToKCQkJcmV0dXJuIEZhbHNlCglmb3IgeCBpbiByYW5nZSg5KToKCQlpZiBncmlkW3hdW2NvbF0gPT0gbnVtOgoJCQlyZXR1cm4gRmFsc2UKCXN0YXJ0Um93ID0gcm93IC0gcm93ICUgMwoJc3RhcnRDb2wgPSBjb2wgLSBjb2wgJSAzCglmb3IgaSBpbiByYW5nZSgzKToKCQlmb3IgaiBpbiByYW5nZSgzKToKCQkJaWYgZ3JpZFtpICsgc3RhcnRSb3ddW2ogKyBzdGFydENvbF0gPT0gbnVtOgoJCQkJcmV0dXJuIEZhbHNlCglyZXR1cm4gVHJ1ZQpkZWYgc29sdmVTdWRva3UoZ3JpZCwgcm93LCBjb2wpOgoJaWYgKHJvdyA9PSBOIC0gMSBhbmQgY29sID09IE4pOgoJCXJldHVybiBUcnVlCglpZiBjb2wgPT0gTjoKCQlyb3cgKz0gMQoJCWNvbCA9IDAKCWlmIGdyaWRbcm93XVtjb2xdID4gMDoKCQlyZXR1cm4gc29sdmVTdWRva3UoZ3JpZCwgcm93LCBjb2wgKyAxKQoJZm9yIG51bSBpbiByYW5nZSgxLCBOICsgMSwgMSk6CgkJaWYgaXNTYWZlKGdyaWQsIHJvdywgY29sLCBudW0pOgoJCQlncmlkW3Jvd11bY29sXSA9IG51bQoJCQlpZiBzb2x2ZVN1ZG9rdShncmlkLCByb3csIGNvbCArIDEpOgoJCQkJcmV0dXJuIFRydWUKCQlncmlkW3Jvd11bY29sXSA9IDAKCXJldHVybiBGYWxzZQpncmlkID0gW1szLCAwLCA2LCA1LCAwLCA4LCA0LCAwLCAwXSwKCQlbNSwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMF0sCgkJWzAsIDgsIDcsIDAsIDAsIDAsIDAsIDMsIDFdLAoJCVswLCAwLCAzLCAwLCAxLCAwLCAwLCA4LCAwXSwKCQlbOSwgMCwgMCwgOCwgNiwgMywgMCwgMCwgNV0sCgkJWzAsIDUsIDAsIDAsIDksIDAsIDYsIDAsIDBdLAoJCVsxLCAzLCAwLCAwLCAwLCAwLCAyLCA1LCAwXSwKCQlbMCwgMCwgMCwgMCwgMCwgMCwgMCwgNywgNF0sCgkJWzAsIDAsIDUsIDIsIDAsIDYsIDMsIDAsIDBdXQoKaWYgKHNvbHZlU3Vkb2t1KGdyaWQsIDAsIDApKToKCXByaW50aW5nKGdyaWQpCmVsc2U6CglwcmludCgibm8gc29sdXRpb24gZXhpc3RzICIp