Я пишу код в основном который решает судоку на Python
Я пытался написать код для решения судоку. Этот метод в основном включает в себя поиск пустых элементов в списке входных данных, а затем заполнение пустых элементов возможными значениями, которые могут быть использованы в этом поле, путем удаления значений, присутствующих в строке, столбце или поле. Затем я попробовал использовать метод обратного отслеживания для решения, используя каждое значение, присутствующее в списке.
Более того, я считаю, что функция remove работает не так, как должна была бы работать, потому что если бы она работала правильно, то значение 8 не должно было бы быть там в списке в[1][2].
def print_grid(arr): for i in range(9): for j in range(9): print arr[i][j], print ('\n') def emptyLoc(a): l=[0,0] for i in range(9): for j in range(9): if(a[i][j]==0): a[i][j] = [1,2,3,4,5,6,7,8,9] l[0] = i l[1] = j return l def remove(a): for i in range(9): for j in range(9): if type(a[i][j]) == list : x = a[i][j] for k in x: for l in range(9): if(k == a[i][l]): x.remove(k) for i in range(9): for j in range(9): if type(a[i][j]) == list: x = a[i][j] for k in x: for l in range(9): if(k == a[l][j]): x.remove(k) for i in range(9): for j in range(9): if type(a[i][j]) == list: x = a[i][j] for k in x: for l in range(3): for m in range(3): if(k == a[l+i-(i%3)][m+j-(j%3)]): x.remove(k) return a def solver(arr): newArr = emptyLoc(arr) finalArr = remove(arr) #Changing One element lists to that single element for i in range(9): for j in range(9): if type(arr[i][j]) == list and len(arr[i][j]) == 1: arr[i][j] = arr[i][j][0] for i in range(9): for j in range(9): if not(type(arr[i][j]) == list): return True else : for num in arr[i][j]: store = arr[i][j] arr[i][j] = num if (solver(arr) == True): return True else : arr[i][j] = store return False if __name__ == "__main__": 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(solver(grid)): print_grid(grid) else: print "No solution exists"
Что я уже пробовал:
Я не понимаю, где я в основном ошибаюсь с кодом, когда получаю неотслеженный ответ. Это и есть ожидаемый результат
3 1 6 5 7 8 4 9 2
5 2 9 1 3 4 7 6 8
4 8 7 6 2 9 5 3 1
2 6 3 4 1 5 9 8 7
9 7 4 8 6 3 1 2 5
8 5 1 7 9 2 6 4 3
1 3 8 9 4 7 2 5 6
6 9 2 3 5 1 8 7 4
7 4 5 2 8 6 3 1 9
но я получаю это как выход
3 [1, 4, 7, 9] 6 5 [2, 4, 7] 8 4 [2, 6, 9] [2, 6, 7, 9]
5 2 [1, 4, 8, 9] [1, 3, 4, 6, 7, 9] [3, 4, 7] [1, 4, 7, 9] [4, 7, 8, 9] [4, 6, 8, 9] [6, 7, 8, 9]
[4, 8] 8 7 [4, 6, 9] [2, 4, 8] [2, 4, 8, 9] [5, 8, 9] 3 1
[2, 4, 6, 7] [4, 6, 7] 3 [4, 7] 1 [2, 4, 5, 7] [4, 7, 9] 8 [2, 6, 7, 9]
9 [1, 4, 6, 7] [1, 2, 4, 7] 8 6 3 [1, 4, 7, 9] [1, 2, 4, 9] 5
[2, 4, 6, 7, 8] 5 [1, 2, 4, 7, 8] [3, 4, 7] 9 [2, 4, 7] 6 [1, 2, 4, 8] [2, 3, 7]
1 3 [2, 4, 7, 8, 9] [4, 7, 9] [4, 7, 8] [4, 7, 9] 2 5 [6, 8, 9]
[2, 6, 8] [3, 6, 9] [2, 8, 9] [1, 3, 9] [3, 5, 8] [1, 5, 8, 9] [1, 5, 8, 9] 7 4
[4, 6, 7, 8] [4, 6, 7, 9] 5 2 [3, 4, 7, 8] 6 3 [1, 6, 8, 9] [6, 8, 9]
Кто-нибудь, пожалуйста, помогите мне с этим. Спасибо!!!
Patrice T
и вход был ...
Da_keiser
Ввод упоминается в том случае, если __имя__ == "__основной__" часть кода