Краткое описание принципов - игнорирование приведенного вами примера.Надеемся, что с идеей, вы можете связать ее с примером самостоятельно.
Базовый подход - это то, что послужило основой для большого количества «Искусственного интеллекта», по крайней мере, как это было видно примерно до конца80-е годы.Самое общее решение многих загадок - это, в основном, попытаться найти все возможные решения.
Итак, сначала вы попробуете все возможные решения с 1 в верхнем левом углу, затем все возможные решения с 2 в верхнем -левый угол и тд.Вы повторяете, чтобы попробовать варианты для второй позиции, третьей позиции и так далее.Это называется исчерпывающим поиском - или «грубой силой».
Проблема в том, что это занимает почти всегда - но вы можете сократить многие бессмысленные поиски.
Например, разместив1 в верхнем левом углу, вы повторяете.Вы помещаете 1 в следующую позицию и снова выполняете рекурс - но теперь вы обнаруживаете, что нарушили два правила (два в ряд, два в блоке 3х3), даже не заполнив остальную часть доски.Таким образом, вы «возвращаетесь» - то есть выходите из рекурсии на предыдущий уровень и переходите к установке второй позиции 2.
Это позволяет избежать лот поиска и делает вещи практичными.Также возможны дальнейшие оптимизации, если вы будете отслеживать цифры, которые до сих пор не используются в каждой строке, столбце и блоке, - подумайте о пересечении этих множеств.
То, что я описал, на самом деле является алгоритмом решения (если выучтите, что некоторые ячейки уже заполнены).Генерация случайного решенного судоку - это то же самое, но для каждой позиции цифр вы должны пробовать цифры в случайном порядке.Это также оставляет проблему принятия решения о том, какие ячейки оставить пустыми, в то же время гарантируя, что головоломка все еще может быть решена, и (намного сложнее) конструирования головоломок с настройкой уровня сложности.Но, в некотором смысле, основной подход к этим проблемам уже здесь - вы можете проверить, является ли конкретный набор пустых пробелов допустимым, запустив алгоритм решения и найдя, например, (и сколько) решений, которые вы получаете, например,Вы можете создать поиск действительного набора ячеек, оставленных пустыми.
Уровень сложности сложен, поскольку зависит от восприятия человеком сложности.Хммм - могу ли я где-нибудь снова вставить «трудный» туда ...
Один подход - разработать более сложный алгоритм поиска, который использует типичные человеческие правила, а не рекурсивный поиск, и который оценивает сложность какнеобходим самый глубокий уровень рекурсии.Некоторые эмпирические правила также могут быть оценены как более продвинутые, чем другие, поэтому их использование в большей степени ведет к трудностям.Очевидно, что сложность субъективна, поэтому нет единственного правильного ответа на вопрос, как именно следует делать подсчет очков.
Это дает вам меру сложности для конкретной головоломки.Создать головоломку напрямую для уровня сложности будет сложно - но при попытке выбора разных ячеек, чтобы оставить пустым, вы можете попробовать несколько вариантов, отслеживать все оценки сложности, и в конце выбрать тот, который был ближайшим к вашемуцелевой уровень сложности.