Начну немного издалека.
Следующие преобразования любое корректное решение CxNy переводят в корректное решение CxNy:
1. произвольная перестановка столбцов;
2. произвольная перестановка строк;
3. произвольная перестановка цветов;
4. транспонирование.
Будем называть изоморфными два решения CxNy которые переводятся друг в друга при помощи некоторой комбинации указанных преобразований.
В случае диагональных решений, потребуем дополнительно, чтобы при изоморфизме сохранялась диагональность.
Рассмотрим ограничения, налагаемые последним требованием, на указанные изоморфные преобразования.
Начнём с конца:
4. транспонирование переводит любое диагональное решение само в себя;
3. произвольная перестановка цветов применима к диагональному решению без ограничений;
2. произвольная перестановка строк -- ограничения аналогичны ограничениям для произвольной перестановки столбцов.
Перестановку столбцов рассмотрим более внимательно.
Для нестрого диагональных решений единственно-возможная перестановка столбцов это перестановка приводящая к "зеркальной" раскраске (при этом изменяется направление диагоналей).
В случае строго диагональных решений добавляется ещё циклическая перестановка столбцов (при этом направление диагоналей не меняется).
Для канонических раскрасок выберем направление диагоналей "слева-вверх".
Таким образом для базовых векторов нестрого диагональных решений единственным изоморфным преобразованием является произвольная перестановка цветов.
А для базовых векторов строго диагональных решений добавляется ещё циклический сдвиг базового вектора.
Вот теперь, собственно, и перейдём к построению канонического базового вектора для строго диагонального решения.
Покажу на примере строго диагонального решения с базовым вектором:
Код:
1,4,1,4,2,2,1,3,3,2,3,2,4,4,3,1
Циклически сдвинем этот вектор так, чтобы первый и последний элементы были различными. Например, так:
Код:
1,4,2,2,1,3,3,2,3,2,4,4,3,1,1,4
Базовый вектор разбивается на блоки одинаковых цифр. Запишем вектор длин этих блоков:
Код:
1,1,2,1,2,1,1,1,2,1,2,1
Рассмотрим все циклические сдвиги базового вектора при которых первый и последний элементы различны, а соответствующие вектора длин блоков являются наименьшими в лексикографическом порядке.
Таких векторов два:
Код:
4,1,4,2,2,1,3,3,2,3,2,4,4,3,1,1
2,3,2,4,4,3,1,1,4,1,4,2,2,1,3,3
С вектором длин блоков:
Код:
1,1,1,2,1,2,1,1,1,2,1,2
Приведём каждый из них к каноническому виду:
Код:
1,2,1,3,3,2,4,4,3,4,3,1,1,4,2,2
1,2,1,3,3,2,4,4,3,4,3,1,1,4,2,2
Полученные вектора равны, но если бы это было не так, то мы бы взяли наименьший в лексикографическом порядке. Назовём такой вектор наименьшим каноническим базовым вектором.
Критерий изоморфности строго диагональных решений такой:
строго диагональные решения изоморфны тогда и только тогда, когда равны их наименьшие канонические базовые вектора.