ИМК 8 методом хода шахматного коня. 6

Георгий Александров
Хотел писать миниатюру, но получится наверняка целый рассказ. Потому что не все сложные вещи можно уместить в один контейнер. Иногда требуется целый состав вагонов. Речь пойдёт о дальнейшем развитии общего метода построения идеальных магических квадратов, при построении которых используются ходы буквой Г. То есть шахматным конём. Мы будем говорить только о матрице порядка 8, поскольку именно ее пытался разрулить гигант математики Леонард Эйлер. Хотел, но не смог. Дело в том, что задача не имеет решения, если по мере ходов буквой Г проставлять числа натуральным образом. Задачу можно решить только проставляя числа в иной последовательности. Такую последовательность я назвал "цепью Александрова". О ней довольно скупо сообщил в одной из миниатюр, но решение настолько изумительно с точки зрения необычности подхода, что назрела необходимость детально в нём разобраться.

Обстоятельная статья по цепям Александрова находится по ссылке:

http://renuar911.narod.ru/IMS_Alexandrov.html

Там приводится текст программы на языке Yabasic:

rem Построение идеального магического квадрата ИМК
dim p(1000),z(1000,1000),t(1000),r(1000)
print " INPUT THE ORDER OF IMS (n = 5, 7, 8, 9, 11, 12, ... )";
input n:print
if n<5 or (n-2)/4=int((n-2)/4) then print "For n =  ";:print n;
print " decisions does not exist ":print:print:end:fi
open #1,"Ideal_n.txt","w"
rem Составление цепи Александрова
p(1)=1:p(2)=n:k=(n-4)/8
if n/2=int(n/2) then
if k=int(k) then
r1=n/2+2:p1=4*(k+1):p(r1)=2
for i=0 to k-0:p(r1+1+i)=p1-4*i:next i
p2=p1-5:r2=r1+k:p(r2)=p2
for i=0 to k-2:p(r2+i)=p2-4*i:next i
r3=r2+k-1:p(r3)=8
p(r3+1)=4:p(r3+2)=3:p(r3+3)=6
r4=r3+4:for i=0 to k-2:p(r4+i)=5+4*i:next i
r5=n:for i=0 to k-2:p(n-i)=p1-2-4*i:next i:fi
if k<>int(k) then:p(n/2+2)=2
for i=1 to n/4-1:p(n/2+2+i)=n/2-2*(i-1):next i
for j=1 to n/4-1:p(n/2+1+i+j)=3+2*(j-1):next j:fi
for i=3 to n/2+1:p(i)=n+1-p(n+3-i):next i:fi
if n/2<>int(n/2) then:n1=(n-3)/2
p(1)=1:p(2)=n:p((1+n)/2+1)=(1+n)/2:no=(n-3)/2
t(5)=3:t(7)=6:t(9)=2:if n=5 then p(3)=2:p(n)=4:fi
if n=7 then p(3)=3:p(4)=6:p(6)=2:p(n)=5:fi
if n=9 then p(3)=3:p(4)=6:p(5)=2:p(7)=8:p(8)=4:p(n)=7:fi
if n>9 then:t(11)=5:t(13)=7:t(15)=4:t(17)=8:t(19)=12
t(21)=9:s=21
for k=1 to (n+1)/2:for i=1 to 6:s=s+2:t(s)=6*k+t(9+2*i)
next i:next k
rem Блок корректировки значений t(i)
o=mod(n,12)
if o=11 then t(n-4)=t(n-4)-2:fi
if o=1 or o=7 then t(n)=t(n)-3:fi
s1=2:s0=0
for i=5 to n step 2:s1=s1+1:p(s1)=t(i):s0=s0+1:r(s0)=1+n-t(i)
next i:s1=s1+1
for i=n to 5 step -2:s1=s1+1:p(s1)=r(s0):s0=s0-1:next i:fi
s=0:s1=0:s0=0:fi:print #1
print #1,"ИДЕАЛЬНЫЙ МАГИЧЕСКИЙ КВАДРАТ ПОРЯДКА n = ";
print #1,n
print #1,"ЦЕПЬ АЛЕКСАНДРОВА : ";
for i=1 to n:print p(i);:print #1,p(i);:next i:print:print:print:print #1
print #1:for k=1 to n:for t=1 to n
if n/2<>int(n/2) then
if k=1 and t=1 then j=(n+1)/2:i=(n+1)/2-1:fi
if t=1 and k>1 then i=i+2:if j<0 then j=j+n:fi:if i<0 then i=i+n
fi:fi:if t>1 then i=i+1:j=j+2:fi:fi
if n/2=int(n/2) then
if k=1 and t=1 then j=1:i=1:fi
if t=1 and k>1 then i=i-1:j=j-1:if j<0 then j=j+n:fi:if i<0 then
i=i+n:fi:fi:if t>1 then i=i+1:j=j+2:fi:fi
rem приведение i и j к рамкам магического квадрата
v=i:a():i=v2:v=j:a():j=v2:z=(p(k)-1)*n+p(t):z1=int(z)
if abs(z-z1)>.9 then z=z1+1 else z=z1:fi:z(i,j)=z
next t:next k:print #1:for i=1 to n:for j=1 to n
print #1,z(i,j) using "####";
next j:print #1:print #1:next i:print #1
sub a()
v0=v/n:v1=int(v0):if v0<1 then v1=0:fi
v2=(v0-v1)*n:v3=int(v2)
if abs(v2-v3)>.9 then v2=v3+1 else z=v3:fi
if abs(v2)<.0000000001 then v2=n:fi
end sub

Программа составлена таким образом, что можно задаваться любым числом n (по запросу с экрана), но в тех случаях, когда ИМК невозможны, (например, при n=18) выдается сообщение:

For n = 18  decisions does not exist,  то есть:   Для n=18  решений не существует.

Если при запуске проги ввести с клавиатуры число 8, то будет выведено решение, показанное на рисунке. Это последовательность восьми чисел (цепь Александрова) и идеальный магический квадрат. Рассмотрим подробно, как сказанные вещи взаимно связаны.
Итак, для ИМК(8) цепь чисел A(i) : 1 8 6 5 7 2 4 3. Теория их довольно сложная. Я такую последовательность получил тупым перебором миллиардов вариантов. Насчет же единственности решения ничего не могу сказать. Возможно, существуют иные решения. Надеюсь, скоро появится продвинутый математик, который расставит все точки над i.

Алгоритм получения цепей Александрова виден в тексте программы. Если кому интересно, может пройтись по командам и всё уяснить. Моя же задача сейчас - показать принцип построения идеального магического квадрата. Для удобства излагаю по пунктам.
1. Единичку помещаем в левой верхней ячейке.
2. Делаем ходы шахматным конём так: два шага наверх, шаг вправо. Ячейки выделяем красными рамками. В этих ячейках находятся числа z(i), определяемые формулой:

 z(i)=[A(i)-1]*n+1.

Найдем эти числа:

z(1)=[1-1]*8+1=1
z(2)=[8-1]*8+1=57
z(3)=[6-1]*8+1=41
z(4)=[5-1]*8+1=33
z(5)=[7-1]*8+1=49
z(6)=[2-1]*8+1=9
z(7)=[4-1]*8+1=25
z(8)=[3-1]*8+1=17

Расстановка полученных восьми результатов по выделенным ячейкам производится весьма хитрым путем. На рисунке в правой верхней части приведена схема преобразования цепи в последовательность чисел, помещаемых в красные рамки. Не буду грузить читателя высокими математическими материями, а скажу только, что это результат месячной работы головного мозга. Шахматные ходы по зеленым кружочкам в матрице восьмого порядка сомнений, думаю, не вызывают.

27 июля 2021 г.