偶数の魔方陣を作成する

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

魔方陣とは1〜Nまでの数字を「縦、横、斜めの合計がいずれも等しくなる」ように並べた行列です。
4,8,16, ...などの偶数の魔方陣を作成します。

前田稔の超初心者のプログラム入門

プログラムの作成

  1. メモ帳などでタイプして Houjing.java の名前で保存して下さい。
        //★ 8*8の魔方陣  前田 稔
        class Houjing
        {   public static void main(String[] args)
            {   int     t[][] = new int[8][8];
                int     x,y,n;
    
                for(y=0; y<8; y++)
                    for(x=0; x<8; x++)
                    {   n= y*8+x+1;
                        if (y==x || x+y==7 || x+y==3 || x+y==11 || y-x==4 || x-y==4)
                            t[y][x]= 65-n;
                        else    t[y][x]= n;
                    }
                for(y=0; y<8; y++)
                {   for(x=0; x<8; x++)
                        if (t[y][x]>9)  System.out.print(t[y][x] + "  ");
                        else            System.out.print(" " + t[y][x] + "  ");
                    System.out.println("");
                }
            }
        }
        
  2. Houjing.java をコンパイルして Houjing.class を作成して class オブジェクトを実行して下さい。
    コンパイルの詳細は Java を動かす を参照して下さい。
    ページ先頭の画面が表示されたら完成です。

プログラムの説明

魔方陣とは1〜Nまでの数字を「縦、横、斜めの合計がいずれも等しくなる」ように並べた行列です。
4*4の魔方陣は1〜16の数を縦、横、斜めの合計が34になるように並べます。
8*8の魔方陣は1〜64の数を縦、横、斜めの合計が260になるように並べます。

8*8の魔方陣を計算する二次元配列の定義と配列に値を格納するコードです。
{   int     t[][] = new int[8][8];
    int     n,x,y;

    for(y=0; ...)
        for(x=0; ...)
            t[y][x]= n;


魔方陣のアルゴリズム

4*4の魔方陣は以下の方法で作成することができます。
  1. 1〜16の数を順に並べます。
  2. その下に16〜1の数を並べます。
  3. 4*4の対角要素には下の段の、それ以外は上の段の数字を選択します。
  4. 対角要素とは対角線上の[0,0][1,1][2,2][3,3][0,3][1,2][2,1][3,0]のことで○印が付いています。

  5. 8*8や16*16のときの対角要素の判定は4*4を組み合わせて下さい。
    例えば[0,3][1,2] だけで無く [0,4][1,5][3,7][4,0]なども対角要素に加えます。

【演習】

課題1

説明したアルゴリズムで作成できる魔方陣の条件を調べて下さい。
6方陣や10方陣や14方陣は作成できるのでしょうか?。

課題2

説明したアルゴリズムで作成出来ない場合、解は無いのでしょうか?。

超初心者のプログラム入門(Java2)