+ 3

# Why is the output same as the input board ?

board = [ [7,8,0,4,0,0,1,2,0], [6,0,0,0,7,5,0,0,9], [0,0,0,6,0,1,0,7,8], [0,0,7,0,4,0,2,6,0], [0,0,1,0,5,0,9,3,0], [9,0,4,0,6,0,0,0,5], [0,7,0,3,0,0,0,1,2], [1,2,0,0,0,0,7,4,0], [0,4,9,2,0,6,0,0,7] ] def backtrack_solve(board): find = find_empty(board) if find is None: return True else: row, col = find for i in range(1, 10): if is_valid(board, i, (row, col)): board[row][col] = i if backtrack_solve(board): return True board[row][col] = 0 return False def is_valid(board, num, position): # To check rows for i in range(len(board[0])): if board[position[0]][i] == num and position[1] != i: return False # To check columns for i in range(len(board)): if board[i][position[1]] == num and position[0] != i: return False # To check small-squares square_x = position[1] // 3 square_y = position[0] // 3 for i in range(square_y * 3, square_y* 3 + 3): for j in range(square_x * 3, square_x* 3 + 3): if board[i][j] == num and (i, j) != position:`enter code here` return False return True def print_board(board): for i in range(len(board)): if i % 3 == 0 and i != 0: print("------------------------") for j in range(len(board[0])): if j % 3 == 0 and j != 0: print(" | ", end="") if j == 8: print(board[i][j]) else: print(board[i][j], end=" ") def find_empty(board): for i in range(len(board)): for j in range(len(board[0])): if board[i][j] == 0: return (i, j) return None print_board(board) print("\n\n") backtrack_solve(board) print_board(board)`enter code here`

12th Mar 2020, 10:20 AM
Nikita
11 Antworten
+ 3
board hasn't changed. You need to do board = backtrack_solve(board) on the penultimate line.
12th Mar 2020, 10:30 AM
Russ
+ 3
It's not the case... Since we're passing board as a parameter, it should change. Check that out Russ https://code.sololearn.com/c9Z687Gs0qPH/?ref=app
12th Mar 2020, 11:14 AM
Nikita
+ 2
I'm changing the board inside the backtrack_solve, so I don't have to update it further Russ
12th Mar 2020, 10:37 AM
Nikita
+ 2
Can you check it bro... 👑 Prometheus 🇸🇬
12th Mar 2020, 10:42 AM
Nikita
+ 2
This is a backtracking algorithm to solve a sudoku, the code is not on SoloLearn.. Thats why I've shared it in post. Thanx for the advice but it would be great if you've shared its solution too... Or is that you can't solve itManinder \$ingh
12th Mar 2020, 10:49 AM
Nikita
+ 1
First of all, tell what this code is doing and always code in the code playground, not in the post section.
12th Mar 2020, 10:46 AM
Maninder \$ingh
+ 1
'board' inside your backtrack_solve function is not the same as the global variable 'board'. If you want to change thw global 'board' inside the function, you need to declare global board inside it. Of course, that would render the board parameter of that function pointless and it would be better to remove it. def backtrack_solve(): global board ...
12th Mar 2020, 11:01 AM
Russ
+ 1
Hey SpArShiKa 🎀 ..Help Me Out.. 😂
12th Mar 2020, 11:16 AM
Nikita
+ 1
Nitesh_Babu_Sharma check this code this is backtracking for solve sudoku and try to find where are you going wrong. https://code.sololearn.com/cbQvETmXZc1k/?ref=app
12th Mar 2020, 11:18 AM
Maninder \$ingh
+ 1
Nitesh_Babu_Sharma Yep sorry, you are right. So I've finally been able to look at it properly, and I see why it hasn't changed. I've inserted the line 'print(row, col)' between if backtrack_solve(board): and return True. This will show which row and col number would have been changed since, if backtrack_solve(board) returns False, the number you have just changed is returned to 0. You should see that no row and column gets output, meaning that your code has simply not found any way of determining any new numbers. (This may be something to do with you having two 7s in the bottom right section of the grid.) If you want advice on how to fix this, I'd suggest fully commenting your code to describe your algorithm, and posting the direct link to it, rather than pasting the code itself.
12th Mar 2020, 11:35 AM
Russ
+ 1