Как решать сложные судоку

Зачем решать судоку?

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

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

Судоку к нам пришло в 21-м веке из Японии, поэтому другое популярное название судоку – японский квадрат. В саму Японию головоломка пришла в 20-м веке из США.

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

Если каждый день решать по одному судоку, то всех существующих комбинаций вам хватит на 17 миллионов лет вперёд!!!

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

По горизонтали строки пронумерованы буквами от А д

По горизонтали строки пронумерованы буквами от А до И, по вертикали нумерация от 1 до 9, внутренние блоки пронумерованы от 1 до 9, центр квадрата находится в блоке №5 с координатами Д5.

Квадрат заполняется цифрами от 1 до 9. Судоку считается решенным, если заполнена 81 ячейка квадрата, таким образом, чтоб ни одно число не повторялось по горизонтали или по вертикали и внутри маленького блока 3х3 встречалось только один раз.

Из этого условия вытекает еще одно правило – сумма всех чисел в каждой строке хоть по вертикали, хоть по горизонтали и в отдельном маленьком квадрате равняется 45.

Видео ролик с решением судоку для тех, кому на слух проще воспринимать информацию.

Видео

Как решать простые судоку

Начинать разгадывать числовые головоломки следует с решения простых вариантов.

Очевидные одиночки

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

Скрытые одиночки

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

Перекрестное исключение

Принцип того, как разгадывать судоку, заключается в умении анализировать и сопоставлять. Еще одним способом исключить варианты является наличие какой-либо цифры в двух столбцах или строчках, которые пересекаются между собой. В нашем примере подобной ситуации не встретилось, поэтому рассмотрим другой. На картинке видно, что «двойка» встречается во втором и третьем среднем блоке единожды, при комбинации чем связаны, и взаимоисключают друг друга. Исходя из этих данных, цифру 2 можно удалить из других ячеек в указанных столбцах.

Также можно применять для трех и четырех строк. Сложность метода заключается в трудностях визуализации и выявления связей.

подстановки /

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

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

Максимально заполненная секция на данный момент –

Максимально заполненная секция на данный момент – это горизонтальная строка З, в которой всего две свободные ячейки с координатами З1 и З7 с отсутствующими числами 2 и 3.

В любой из этих ячеек с одинаковой вероятностью может находиться как 2, так и 3. Если в ячейку З1 поставить 3, нам это ничего не даст, потому что в соседних блоках нет числа 3, и дальше снова не отчего будет отталкиваться.

С момента, когда я сделал допущение, что координаты З1 принадлежат числу 2, я числа начал писать другим цветом. Это позволит в случае ошибки легко убрать все неверные выводы.

В квадрате №1 заполняем оставшиеся ячейки А1 – 4, Б1 – 3 и переходим заполнять по методу очевидных одиночек квадрат №2. В клеточке А4 будет стоять 3 и в клеточке В5 – 2, в квадрате №7 ставим в Ж5 3.

Возвращаемся к горизонтальной строке Г, где появились две явные одиночки – 4 в клетке Г2, и единственный вариант, где в этой строке может находиться 3 это клетка Г9.

К этому моменту у меня накопилось четыре клетки, г

К этому моменту у меня накопилось четыре клетки, где никак не получается сделать выбор 5 или 6? Это координаты Г1, Г5, Д5 и И1. При разгадывании числового квадрата встречаются такие пары, когда решение будет верным во всех случаях, но обычно такие моменты бывают в самом конце решения.

На первый взгляд в квадрате №5 ничего не меняется от того поставить 5 в центр на Д5 или на Г5 – соблюдаются все условия для решения, в каждом ряду и столбце и секции нет повторов одинаковых чисел.

Уже опираясь больше на интуицию, ставлю 5 по центру, в клетку Д5. Тогда получается, что цифра 6 будет в клетках Г5, И1, Ж4, Е2, цифра 3 – Е3, И2, 5 пишем в Г1 и 2 в И4.

В горизонтальном столбе №2 остается не заполненной

В горизонтальном столбе №2 остается не заполненной одна клетка – Ж2 и для полного числового ряда не хватает цифры 8. Пишем 8, и смотрим квадрат №9. В нём для 8 остается только одна клетка – И9.

В самом нижнем горизонтальном ряду И теперь остало

В самом нижнем горизонтальном ряду И теперь осталось заполнить две клетки И3 и И8, и два числа – 4, 5. В клетку И8 мы не можем записать 4, потому что в столбце 8 уже есть 4 по координатам Е8.

Тогда в клетку И8 ставим 5 и в клетку И3 пишем 4. Тогда в квадрате №7 в оставшейся ячейке Ж3 будет стоять 5. И в квадрате №3 для 5 остаются координаты В7, последнюю клетку с ряда В, В8 заполняем единственно возможным числом – 6.

Правила игры в судоку

Игровое поле головоломки занимает мало пространства, в отличие от кроссвордов и сканвордов. Оно включает в себя 81 ячейку. Они разбиты на маленькие блоки размером 3х3 см. Поле легко помещается на простом тетрадном листе.

Игровое поле судоку

Игровое поле судоку

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

В каждой колонке или ряду должны быть проставлены цифры от 1 до 9. Также показатели не повторяются в пределах одного блока (столбика, строки или квадрата). Судоку разделяются на несколько уровней сложности – в зависимости от количества заполненных цифр. Чем их меньше, тем сложнее игра. Обычно существует пять уровней, самый трудный могут решить только опытные игроки.

В каждом выделенном блоке не должно быть повторяющ

В каждом выделенном блоке не должно быть повторяющихся цифр

В разгадывании судоку используют несколько методов решения. Самые простые головоломки разгадывают методом дедукции. Существует как минимум одна клетка, в которой ставится определенная цифра, и только она туда подходит.

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

Методы решения судоку для продвинутых игроков

В данном разделе описаны сложные технологии, которые пригодятся опытным и отъявленным любителям судоку:

  1. Анализируют блоки из трех больших квадратов в строке или столбце. Выбирают одну цифру и выясняют, можно ли ее разместить во все 3 квадрата. К примеру, игрок рассматривает восьмерку. Нужно узнать, в каких колонках и рядах она уже находится, и применить эту информацию для анализа трех квадратов. В процессе заполнения клеток другие пустые ячейки постепенно находят свое решение.
  2. Проверяя пустые клетки, стоит использовать ту же технологию, что и при внесении цифр.
  3. Некоторые эксперты начинают разгадывать с цифры 1 и направляются по линиям, потом – по блокам. Так человек не запутается и предостережет себя от многих ошибок.
  4. Всегда проверяют, какой цифры недостает там, где осталось много пустот.
  5. Если зашли в тупик, и появилось много пустого пространства, нужно мысленно поделить квадрат на отрезки. Важно поразмыслить, какие цифры могут туда встать, потом станет понятно, какие значения будут располагаться в других квадратиках на соседних линиях.

Метод «сокращение» предполагает, что с каждым шагом и разгадыванием количество предполагаемых цифр сокращается, а решение базируется на методике «одиночка». Способ «сокращение» выделяется в самостоятельное звено, поскольку пользователь должен провести тщательный анализ всех колонок, рядов и квадратов с постепенным исключением синглов. Как итог – единственно правильное решение.

Усложненный метод «сокращения». Согласно

Усложненный метод «сокращения». Согласно столбцу 8, четверки могут находиться лишь в квадрате 3. Убираем лишние четверки в квадрате, и находим, что в C7 остается только 2

Цветовой метод – стратегия, которая незначительно отличается от вышеописанной. Ее смысл заключается в том, что клетки или числа окрашены в разные оттенки. Такое решение позволит игроку визуализировать весь ход разгадывания, но не каждый человек сможет ее использовать. Некоторые люди сбиваются, и у них снижается сосредоточенность.

Для правильного использования цветового окрашивания рекомендуется взять 3-4 оттенка и заполнять ими одинаковые варианты в разных колонках, рядах и квадратиках. Также другим тоном выделяют спорные клетки.

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

Еще один любопытный, но, в целом, бесполезный способ решения судоку – метод проб и ошибок. Пользователь выбирает пробное число из 2 или 3 вероятных. Далее проверяет все блоки. Недостаток технологии состоит в том, что человек должен использовать компьютер. На бумажном листке не получится вернуться к исходным данным.

Методология «рыба меч» основана на следующем правиле: если кандидат располагается в первой, второй и третьей колонке или только в трех рядах, то в других строчках этот сингл можно вычеркивать. Подробное описание шагов:

  1. Отыскивают строки, чтобы кандидат в них присутствовал не выше 3 раз. Но в то же время он включается в три столбика.
  2. Теперь выбрасывают кандидата из других строк и столбцов, в которых его не будет.
  3. Такая же цепочка размышления применяется в трех колонках, когда сингл присутствует в трех рядах.

Наглядно рассмотрим задачку. В трех рядах – в 3,5 и 7 кандидат пятерка обнаружена не более трех раз. Эти клетки заполнены желтым фоном. Кроме того, ячейки входят в три столбца – 3,4 и 7.

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

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

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

Какие правила судоку надо учесть

Их всего два:

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

Также помните о том, что судоку — расслабляющая игра, которая помогает не только потренировать мозг, но и снять стресс. Поэтому не торопитесь и старайтесь получить удовольствие.

Правила, как разгадывать судоку

Чтобы получить верное решение, необходимо учесть несколько простых правил:

  • Цифра может быть записана в ячейку только в том случае, если ее нет в горизонтальной и вертикальной линии, а также в малом квадрате 3*3.
  • Если она может быть записана исключительно в одну клетку.

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

Группы чисел

Группы увидеть сложнее, чем запертых кандидатов, но они помогают пройти многие тупиковые ситуации в сложных кроссвордах.

Голые пары

Самый простой подвид групп – это две одинаковые пары чисел в одном квадрате, строке или столбце. Для примера голая пара чисел [7, 8] в строке:

Если в любой другой клетке в оранжевой строке буде

Если в любой другой клетке в оранжевой строке будет 7 или 8, то в зеленых клетках останется 7 и 7, либо 8 и 8, но по правилам невозможно, чтобы в строке было 2 одинаковых числа, значит все 7 и все 8 убираются из оранжевых клеток.

Еще пример:

Голая пара [5, 8] одновременно в одном столбце и в

Голая пара [5, 8] одновременно в одном столбце и в одном квадрате. Удаляются лишние кандидаты (красные) и из столбца и из квадрата.

Важное замечание – группа должна быть именно «голой», то есть не содержать других чисел в этих клетках. То есть [5, 8] и [5, 8] являются голой группой, а [5, 6, 8] и [5, 8] – нет, так как группа уже не голая, есть лишнее число — 6. Так же [5, 8] и [5, 7] не являются голой группой, так как числа должны быть одинаковы, а здесь 3 разных числа в группе.

Голые тройки

Голые тройки похожи на голые пары, но обнаружить их сложнее – это 3 голых числа в трех клетках.

В примере числа [1, 2, 6] в одной строке повторяют

В примере числа [1, 2, 6] в одной строке повторяются 3 раза. В группе всего 3 числа и они располагаются на 3-х клетках, значит лишние числа 1, 2, 6 из оранжевых клеток удаляются.

Голая тройка может не содержать числа в полном составе, например, подошла бы комбинация: [1, 6], [1, 2] и [2, 6] – это все те же 3 типа чисел в трех клетках, просто в неполном составе.

Голые четверки

Следующее расширение голых групп – голые четверки.

Числа [2, 5], [2, 5, 6, 7], [5, 6, 7], [5, 6] обра

Числа [2, 5], [2, 5, 6, 7], [5, 6, 7], [5, 6] образуют голую четверку из четырех чисел 2, 5, 6 и 7, расположенных в четырех клетках. Эта четверка расположена в одном квадрате, это значит, что все числа 2, 5, 6, 7 из оставшихся клеток квадрата (оранжевые) удаляются.

Скрытые пары

Следующая вариация групп – скрытые группы. Рассмотрим пример:

В самой верхней строке числа 6 и 9 расположены тол

В самой верхней строке числа 6 и 9 расположены только в двух клетках, в других клетках этой строки таких чисел нет. И если в одной из зеленых клеток поставить другое число (например 1), то в строке не останется места для одного из чисел: 6 или 9, значит нужно удалить все числа в зеленых клетках, кроме 6 и 9.

В итоге, после удаления лишнего, должна остаться только голая пара чисел.

Скрытые тройки

Аналогично скрытым парам – 3 числа стоять в 3-х клетках квадрата, строки или столбца и только в этих трех клетках. В этих же клетках могут быть другие числа – они удаляются

В примере скрываются числа 4, 8 и 9. В других клет

В примере скрываются числа 4, 8 и 9. В других клетках столбца этих чисел нет – значит удаляем лишних кандидатов из зеленых клеток.

Скрытые четверки

Аналогично со скрытыми тройками, только 4 числа в 4-х клетках.

В примере четыре числа 2, 3, 8, 9 в четырех клетка

В примере четыре числа 2, 3, 8, 9 в четырех клетках (зеленые) одного столбца образуют скрытую четверку, так как в других клетках столбца (оранжевые) нет этих чисел. Удаляются лишние кандидаты из зеленых клеток.

На этом закончим рассмотрение групп чисел. Для тренировки попробуйте решить следующие кроссворды (без подбора): Судоку № 13091, Судоку № 10710

Практическая часть

Описание программы

В качестве контейнера для хранения судоку используется двухмерный std::deque целых числел. Он удобен тем, что позволяет легко производить последовательный обход матрицы и имеет сложность добавления О(1). Для работы алгоритмов проверки ряда, столбца и квадрата3х3 используются контейнеры std::set, а в методе, который проверяет одну ячейку с помощью вышеупомянтых — std::unordered_set, так как добавление в него происходит за константное время, в отличие от логарифмического в std::set. Следовательно, при использовании именно таких контейнеров достигается самая быстрая работа программы, что демонстрируют замеры времени работы программы:

В двух заголовочный файлах описан класс Sudoku. Файл sudoku.hpp описывает интерфейс класса, а в файле sudoku.h хранится реализация. Класс имеет публичный конструктор, функцию решения и печати судоку в файл. Остальные поля класса — приватные. Программа компилируется и запускается из командной строки. В одной директории с программой должна находиться папка tests, в которой хранится файл с матрицей, описывающей судоку в формате целых чисел от 1 до 9 или -1, если клетка должна быть пустой, записанных через пробел. Для того, чтобы запустить программу, в терминале нужно выполнить команду ./compiled_program_file_name 1 additional_file_name. Входные файлы для программы должны называться input_additional_file_name.dat, где additional_file_name — любая строка без пробелов. Выходные файлы будут иметь название в формате output_additional_file_name.ans. Программа неинтерактивная, пользовательский ввод не предусмотрен.

Описание тестов

Тесты empty и not_dig(здесь и далее приводятся только additional_file_name вместо полного названия файлов) — это тесты корректности вводимой информации:

  • empty — пустой файл
  • not_dig — файл, который внутри матрицы содержит не только числа

Теги

Adblock
detector