Алгоритмы Россера, конечно, классные. Однако не стоит останавливаться только на этих алгоритмах. Есть и другие алгоритмы. Об одном из них я уже говорила, это алгоритм
svb для N=6.
Я сначала нашла решение для N=8 по алгоритму Россера (решётки), а потом разработала новый алгоритм и нашла лучшие решения.
Далее, есть общие формулы пандиагональных квадратов.
Эти формулы получаются с помощью решения системы линейных уравнений, описывающих пандиагональный квадрат.
Приведу пример общей формулы пандиагонального квадрата 5-го порядка. Переменные в квадрате расположены таким образом:
Код:
е х1 х2 х3 х4
х5 х6 а х7 х8
х9 х10 х11 х12 в
х13 d х14 х15 х16
х17 х18 х19 с х20
Сразу отмечу: переменные a,b,c,d,e,x18,x19,x20,S (магическая константа квадрата) независимые (свободные), остальные переменные зависимые.
Код:
x1 = x20 - d + c
x2 = S - x19 - b - x20 + d - x18 - c
x3 = b + x18 - a
x4 = x19 - e + a
x5 = d + x18 - a
x6 = x19 + b - e
x7 = e + x20 - d
x8 = S - x19 - b - x20 - x18
x9 = x20 + a - d
x10 = S - x18 - c - x19 - b - x20 + e
x11 = -a + x18 + c
x12 = d - e + x19
x13 = c + x19 - e
x14 = -d + b + x20
x15 = S - x18 - c - x19 - b - x20 + a
x16 = x18 + e - a
x17 = S - x18 - x19 - x20 - c
Можно сразу задать магическую константу квадрата S; тогда останется 8 свободных переменных.
Все свободные переменные должны перебираться, все зависимые переменные вычисляются по значениям, принимаемым свободными переменными.
Эту формулу легко реализовать.
Но уже для порядка 6 всё становится намного сложнее - в реализации.
Однако не всё безнадёжно.
И вот чтобы найти нерегулярный пандиагональный квадрат 7-го порядка, надо как раз отвлечься от примитивных квадратов (тут уже ничего выжать невозможно: минимальный регулярный квадрат найден!) и попробовать искать квадрат по общей формуле.
По крайней мере, идеальные квадраты 7-го порядка по общей формуле находятся довольно быстро (есть и у меня такие решения, и у
alexBlack).
Примечание: общая формула пандиагонального квадрата 7-го порядка есть в моей
статье.