Рубрики
Без рубрики

Sudoku Solver в Python

Давайте построим Sudoku Solver в Python сегодня! Sudoku Puzzle – очень популярная головоломка, которая появляется в ежедневной газете, которая привлекает внимание много

Автор оригинала: Pankaj Kumar.

Sudoku Solver в Python

Давайте построим Sudoku Solver в Python сегодня! Sudoku Puzzle – очень популярная головоломка, которая появляется в ежедневной газете, которая привлекает внимание многих людей. Существует много сложных, нерешенных проблем о головоломках судоку и их обобщения, что делает эту головоломку интересной, особенно для многих любителей математики.

Что такое головоломка судоку?

В головоломке судоку нам нужно заполнить каждую пустую коробку с целым числом от 1 до 9 таким образом, что каждый номер от 1 до 9 появляется один раз в каждой строке, каждый столбец и каждый из маленьких 3 на 3 ящики выделены с густыми границами.

Трудность этой головоломки может варьироваться. Чем больше уровень сложности головоломки судоку, тем более сложным исследовательской проблемой он становится для вычислительных ученых. Сложные головоломки в основном имеют менее прописанные символы.

Пазлы судоку, которые публикуются для развлечений, имеют уникальные решения. Считается, что головоломка Судоку считается хорошо сформированной, если у него есть уникальное решение. Еще одна сложная проблема исследований состоит в том, чтобы определить, насколько нельзя заполнить немногие коробки для головоломки судоку. Хорошо сформированная судоку с 17 символами существуют. Неизвестно, существует ли или нет хорошо сформированной головоломки только с 16 подсказками.

Шаги для решения головоломки судоку в Python

  • В этом методе решения головоломки судоку сначала мы назначаем размер 2D-матрицы для переменной M (м * м).
  • Затем мы назначаем утилитую функцию (головоломку) для печати сетки.
  • Позже он назначит номер к строке и Col.
  • Если мы найдем тот же номер в том же строке или той же колонке или в определенной матрице 3 * 3, «False» будет возвращена.
  • Затем мы проверим, достигли ли мы 8-го ряд и 9-й столбец и вернемся к остановке дальнейшего возврата.
  • Далее мы проверим, будет ли значение столбца 9, затем переходим к следующей строке и столбце.
  • Далее теперь мы видим, если текущая позиция сетки имеет значение больше 0, то мы итерации для следующего столбца.
  • После проверки, если это безопасное место, мы переходим к следующему столбцу, а затем назначить NUM в текущей (строке, COL) положении сетки. Позже мы проверяем следующую возможность с следующей столбцом.
  • Поскольку наше предположение не было ошибочно, мы отказываемся от назначенного Num, а затем перейдем к следующему предположению с разным значением Num

Реализация Sudoku Solver в Python

Мы будем использовать метод Backtracking для создания нашего Sudoku Solver в Python. BackTracking означает переключение обратно на предыдущий шаг, как только мы определим, что наше текущее решение не может быть продолжено в полной. Мы используем этот принцип Backtracking для реализации алгоритма судоку.

M = 9
def puzzle(a):
	for i in range(M):
		for j in range(M):
			print(a[i][j],end = " ")
		print()
def solve(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 Suduko(grid, row, col):

	if (row == M - 1 and col == M):
		return True
	if col == M:
		row += 1
		col = 0
	if grid[row][col] > 0:
		return Suduko(grid, row, col + 1)
	for num in range(1, M + 1, 1): 
	
		if solve(grid, row, col, num):
		
			grid[row][col] = num
			if Suduko(grid, row, col + 1):
				return True
		grid[row][col] = 0
	return False

'''0 means the cells where no value is assigned'''
grid = [[2, 5, 0, 0, 3, 0, 9, 0, 1],
        [0, 1, 0, 0, 0, 4, 0, 0, 0],
	[4, 0, 7, 0, 0, 0, 2, 0, 8],
	[0, 0, 5, 2, 0, 0, 0, 0, 0],
	[0, 0, 0, 0, 9, 8, 1, 0, 0],
	[0, 4, 0, 0, 0, 3, 0, 0, 0],
	[0, 0, 0, 3, 6, 0, 0, 7, 2],
	[0, 7, 0, 0, 0, 0, 0, 0, 3],
	[9, 0, 3, 0, 0, 0, 6, 0, 4]]

if (Suduko(grid, 0, 0)):
	puzzle(grid)
else:
	print("Solution does not exist:(")

Выход:

====================== RESTART: C:/Users/SIDDHI/sudoku.py ===========
2 5 8 7 3 6 9 4 1 
6 1 9 8 2 4 3 5 7 
4 3 7 9 1 5 2 6 8 
3 9 5 2 7 1 4 8 6 
7 6 2 4 9 8 1 3 5 
8 4 1 6 5 3 7 2 9 
1 8 4 3 6 9 5 7 2 
5 7 6 1 4 2 8 9 3 
9 2 3 5 8 7 6 1 4 

Заключение

И это это для построения решателя судоку в Python! Я надеюсь, что вы весело прочитали статью и узнали, как мы реализовали код.

Psst … Также есть проще построить Sudoku Solver в Python!

Вы можете импортировать судоку PY-Sudoku.pypi Модуль из https://pypi.org/project/py-sudoku/ Отказ Это простая программа Python, которая генерирует и решает M X N головоломки судоку.

Довольно круто, не так ли? Теперь пришло время играть с головоломками судоку!