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`