проблема раскраски карты / графа является "NP-полной".Что это означает, что научное сообщество почти уверено, что любой данный алгоритм для решения проблемы будет затрачивать экспоненциальное (огромное) количество времени на определенные экземпляры проблемы (например, головоломки).Вот почему ЛЮБОЙ алгоритм, который вы реализуете (включая ваш механизм "грубой силы"), будет подавлять некоторые экземпляры головоломки.
Я бы порекомендовал вам реализовать несколько различных алгоритмов для решения ваших головоломок, например
Алгоритм 1 - один за другим, выберите случайную область и дайте ей цвет, который все еще «подходит», т.е. не является цветом какого-либо цветного соседа.Если вы столкнулись с конфликтом (не можете покрасить выбранную область), остановите алгоритм.Запустите этот цикл, скажем, N раз, и рассчитайте, сколько раз цикл фактически раскрашивает всю карту;пусть это будет K. Здесь вы получите оценку K / N (в процентах), 0% = сложная проблема (возможно, невозможная), 100% = очень очень легкая проблема
Алгоритм 2 - добавитьколичество возвратов к алгоритму 1, например, разрешить максимум 1000 шагов возврата.Запустите тот же цикл «выборки».Вы получаете еще один балл 0% -100%.
Затем используйте полученные результаты (вы получите более высокие баллы из алгоритма 2, чем из алгоритма 1, потому что он более мощный), чтобы получитьотносительная сложность для головоломок.
КЛЮЧ ко всему этому заключается в том, что если вы получаете оценку (0%, 0%), то есть вы не знаете, разрешимы ли головоломки, вы их ОТБЫВАЕТЕ, потому что выне хочу представлять проблемы аудитории, которые могут быть неразрешимыми:)
Наконец, используйте свое собственное суждение, чтобы «сопоставить» оценки с «удобочитаемыми» описаниями сложности - выберите пару головоломок, решите ихвручную проверьте результат, который рассчитывает ваша программа, а затем посмотрите, как процентные показатели соответствуют вашему восприятию сложности.