Цепь Александрова и ИМК 9

Меня попросили подробно показать использование Цепей Алеександрова при построении Идеального магического квадрата 9х9 (ИМК 9). Я давал ссылку на видео, но просили и текстовой материал. Видео тут:
https://www.youtube.com/watch?v=yPu-tlhOAro&t=839s
То же самое видно на рисунке. Даю текст программы, чтобы ее не набивать заново:
Единица ставится над центральной ячейкой (желтой на рисунке).

n=9
dim z(100,100)
z(1,1)=1
z(1,2)=9
z(1,3)=3
z(1,4)=6
z(1,5)=2
z(1,6)=5
z(1,7)=8
z(1,8)=4
z(1,9)=7
for i=1 to n
for j=1 to n
z(i,j)=n*(z(1,i)-1)+z(1,j)
print z(i,j) using "###";
next j
print
next i
end

Попутно дам общую прогу для построения всех возможных идеальных магических квадратов данным методом:

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_9.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=4k где k>1. Об этом - тоже в упомянутом выше видео.
Программа расчета цепей такая:
n=8
dim z(100,100)
z(1,1)=1
z(1,2)=8
z(1,3)=6
z(1,4)=5
z(1,5)=7
z(1,6)=2
z(1,7)=4
z(1,8)=3
z(1,9)=7
for i=1 to n
for j=1 to n
z(i,j)=n*(z(1,i)-1)+z(1,j)
print z(i,j) using "###";
next j
print
next i
end
 получим:

  1   8   6   5   7   2   4   3
 57  64  62  61  63  58  60  59
 41  48  46  45  47  42  44  43
 33  40  38  37  39  34  36  35
 49  56  54  53  55  50  52  51
  9  16  14  13  15  10  12  11
 25  32  30  29  31  26  28  27
 17  24  22  21  23  18  20  19

Причем единичка помещается в левой верхней ячейке. Ходы шахматным конем, а перескок - по диагонали вправо-вниз на соседнюю ячейку. На видео это четко показано.

11 января 2022 г.


Рецензии