TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.78K subscribers
Post #188 407
День сто пятьдесят третий. #ЗаметкиНаПолях
Решатель судоку
По мотивам давнишнего поста https://t.me/NetDeveloperDiary/83 решил сделать небольшую библиотеку для решения судоку на C#. Код здесь: https://dev.azure.com/sbenzenko/NetDeveloper/_git/SudokuSolver

Краткое описание
Сетка судоку представляет собой двумерный массив типа byte. Первоначально заполняется цифрами из задачи судоку, свободные клетки нулями.
Решение задачи (метод SolveSudoku):
1) В методе FindNextCellToFill находим следующую свободную клетку (со значением 0). Если метод возвращает -1, значит свободных клеток нет, задача решена.
2) В цикле пробуем записать в клетку цифры от 1 до 9. В методе IsValid проверяем, не нарушает ли новая цифра правила:
- нет одинаковых цифр в текущем секторе 3х3
- нет одинаковых цифр в текущем столбце
- нет одинаковых цифр в текущей строке
3) Если правила не нарушены, рекурсивно вызываем SolveSudoku (которая выполняет процедуру для следующей пустой клетки).
Если SolveSudoku вернёт true, значит сетка заполнена и задача решена (см. п.1). Выходим из процедуры.
В противном случае нужно отменить сделанные изменения:
- устанавливаем значение клетки обратно в 0,
- увеличиваем количество «отмен» в переменной BackTracks (для статистики).
4) Если мы прошли по циклу в п.2 и ни одно число не подошло, возвращаем false, т.е. решений задачи нет.

В тестовом проекте (SudokuSolverTests) есть три примера решений судоку (лёгкого, среднего и «самого сложного известного»). Они же записаны в консольном проекте SolveSudokuConsole от простого к сложному. Можете раскомментировать один из них и посмотреть решение. По количеству выводимых «отмен» (Backtracks) очевидна сложность задачи.

Примечания:
- Пока нет визуального UI, возможно сделаю позже.
- Решение можно оптимизировать: выполнять поиск доступных цифр в п.2.

Источник и подробности с решением на Python (на английском языке): https://www.youtube.com/watch?v=auK3PSZoidc
More from @netdeveloperdiary
  1. Oct 17, 2026День 2817. #ЧтоНовенького #VS Прекращаем Сборку После Первой Ошибки Мэдс Кристенсен продол…
  2. Oct 16, 2026День 2816. #Карьера #AI Станет ли ИИ-Кодинг Концом Программирования для Людей? Автор ориги…
  3. Oct 15, 2026Post #3374
  4. Oct 14, 2026Post #3373
  5. Oct 13, 2026День 2813. #ЗаметкиНаПолях #Async Ещё Раз Про Async/Await в C#. Часть 1 Почему существует…
  6. Oct 12, 2026День 2812. #Карьера #AI Как Разработчикам Оставаться Полезными, Когда Код Пишет ИИ? По мер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →