Привет! Все мы слышали об очень известной логической головоломке под названием «Судоку». Сегодня я расскажу вам об этой головоломке, одном из способов ее решения и о том, на какой платформе вы можете ее решить. Итак, начнем.

Итак, по сути судоку - это логическая головоломка, которая представлена ​​сеткой 9x9, и мы должны заполнить диапазон чисел от 1 до 9 в каждой ячейке, но есть некоторое правило для заполнения чисел.

  1. Заполните число в ячейке так, чтобы никакая другая ячейка не содержала это число в той же строке, а также в том же столбце.
  2. Заполните число в ячейке так, чтобы каждый из девяти блоков 3x3 содержал все числа от 1 до 9.

Это два правила, которым мы должны следовать, чтобы решить головоломку судоку. Это очень известная головоломка, основанная на логике высказываний в дискретной математике.

Теперь приходит в голову вопрос, как решить эту головоломку?

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

В общем, если я вам скажу, идея решения этой головоломки состоит в том, что всего имеется 9x9 = 81 ячеек. Вы просто пробуете каждую ячейку (которая пуста) и помещаете все числа от 1 до 9 в эту ячейку и проверяете, действительно ли помещать номер в эту ячейку, если он действителен, затем введите номер в ячейку, в противном случае найдите какое-то другое число, попробуйте этот подход для каждой клетки.

Позвольте мне показать вам математические шаги для решения этой головоломки, которые я нашел в Книге дискретной математики, написанной Кеннетом Х. Розеном. Ниже приведено изображение этого ограничения, и вы также можете проверить его в Книге. (на странице 53 pdf). (Ссылка предоставляется.)

Итак, на картинке выше дана математическая форма для решения головоломки судоку. Позвольте мне рассказать вам все шаги простым языком.

Шаги:

  1. Отметьте первое пустое место в данной сетке. (на изображении выше пункт 1)
  2. Если вы не найдете ни одной пустой ячейки, дальше идти не нужно, все ячейки в сетке заполнены действительными числами.
  3. Теперь начните цикл от чисел от 1 до 9 в каждой ячейке, и число, которое удовлетворяет, заполняет это число.

3. а. Возьмите номер и проверьте, находится ли он уже в той же строке или нет. (на изображении выше пункт 2.)

3. б. Возьмите номер и проверьте, находится ли он уже в том же столбце или нет. (на изображении выше пункт 3).

3.c. Возьмите число, затем проверьте, находится ли оно уже в той же сетке 3x3. (На изображении выше, пункт 4).

4. Теперь последняя точка на изображении выше говорит о том, что если все вышеперечисленные условия (3.a, 3.b, 3.c) удовлетворяют, то число не присутствует в той же строке, том же столбце и той же сетке. затем мы присваиваем этот номер этой ячейке и переходим к следующей пустой ячейке.

5. Если где-то наша предыдущая заполненная ячейка не заполнена действительным числом, удалите это число из этой ячейки и снова вернитесь к другому числу.

Все это основные шаги для решения головоломки судоку. Вышеупомянутый алгоритм требует экспоненциального времени для решения головоломки судоку, но вы можете дополнительно оптимизировать это. Я не могу предоставить здесь свой код для этой головоломки, вы просто решаете ее с заданными шагами.

Чтобы узнать больше об этой головоломке, воспользуйтесь указанными ниже ресурсами.

  1. Книга по дискретной математике, написанная Кенетом Х. Розеном.
  2. Лекция MIT по судоку. (здесь вы можете найти более оптимальный способ решения этой головоломки)
  3. Для решения этой головоломки вы можете перейти на Leetcode.

Спасибо вам всем. Если вы найдете что-то не так в этой статье. Скажи пожалуйста.