第8講 4次魔方陣と6次魔方陣の作成

第8話 6次魔方陣コード解説その2(逆対角線移動) 

次に、
  '逆対角線移動
  For i = 0 To m - 1
    w = a(n - 1 - i, i)
    a(n - 1 - i, i) = a(i, n - 1 - i)
    a(i, n - 1 - i) = w
  Next
のコードを見てみましょう。
n = 6、m = 3 であることに注意しながら読んでください。
For i = 0 To m - 1はFor i = 0 To 2 です。
a(n - 1 - i, i)は何を意味するでしょうか。
i=0とのき、a(n - 1 - i, i)=a(6 - 1 - 0, 0)=a(5, 0)
i=1とのき、a(n - 1 - i, i)=a(6 - 1 - 0, 0)=a(5, 0)
i=2とのき、a(n - 1 - i, i)=a(6 - 1 - 0, 0)=a(5, 0)
したがって、今回は

   0  1 2 3 4 5
 0 1 2 3  4 5 6
 1 7 8 9 10 11 12
 2 13 14 15 16 17 18
 3 19 20 21 22 23 24
 4 25 26 27 28 29 30
 5 31 32 33 34 35 36

の6,11,16です。
では、a(i, n - 1 - i)は何でしょうか。
i=0とのき、a(i, n - 1 - i)=a(0, 6 - 1 - 0)=a(0, 5)
i=1とのき、a(i, n - 1 - i)=a(1, 6 - 1 - 1)=a(1, 4)
i=2とのき、a(i, n - 1 - i)=a(2, 6 - 1 - 2)=a(0, 3)なので、a(i, n - 1 - i)は

   0  1 2 3 4 5
 0 1 2 3  4 5 6
 1 7 8 9 10 11 12
 2 13 14 15 16 17 18
 3 19 20 21 22 23 24
 4 25 26 27 28 29 30
 5 31 32 33 34 35 36

31,、26,21ということになります。
以上から
  '逆対角線移動
  For i = 0 To m - 1
    w = a(n - 1 - i, i)
    a(n - 1 - i, i) = a(i, n - 1 - i)
    a(i, n - 1 - i) = w
  Next
では、(6,31),(11,26),(16,21)の交換を行っていることがわかります。

再度確認しておきますが、

  3 4 5
 0  4 5 6
 1 10 11 12
 2 16 17 18

   0  1 2
 3 19 20 21
 4 25 26 27
 5 31 32 33

   0  1 2
 0 1 2 3
 1 7 8 9
 2 13 14 15

を基にして作っています。



第7話へ 第9話へ

004


vc++講義へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ

数学研究室に戻る