第20講 魔方陣汎用的生成プログラムVer.3=末項確定法
第6話 Ver.3(末項確定法)コード解説その3

解説続きその2
前話と同じように解説していったのでは、第20講は後5話も必要になってしまいますので、
ひとつだけ選んで解説して後は、皆さんご自分でトレースをしてください。
そのひとつして
   if(y[g]==n-1 && x[g]>0 && x[g]<n-1){
      int i,w=0;
      for(i=0;i<n-1;i++)w+=m[i][x[g]];
      int sa;
      sa=n*(n*n+1)/2-w;
      if(sa<=0 || sa>n*n)return;
      for(i=0;i<g;i++)if(sa==m[y[i]][x[i]])return;
      m[y[g]][x[g]]=sa;

      if(g+1<n*n){
        f(g+1);
        if(cn>9)return;
      }
      else{
        cn++;
        int j;
        for(i=0;i<n;i++){
          for(j=0;j<n;j++){
            if(m[i][j]<10){
              System.out.print(" "+m[i][j]+" ");
            }
            else{
              System.out.print(m[i][j]+" ");
            }
          }
          System.out.println();
        }
        System.out.println();
        if(cn>9)return;
      }

 
     return;
    }

0 1 2 3 4 5 6 7 8 9
0
1
2
3
4
5
6
7
8
9

の部分すなわち、

の部分を担当するコードの作用を見てみましょう。
色が違いは、if文
      if(g+1<n*n){
        f(g+1);
        if(cn>9)return;
      }
      else{
        cn++;
        int j;
        for(i=0;i<n;i++){
          for(j=0;j<n;j++){
            if(m[i][j]<10){
              System.out.print(" "+m[i][j]+" ");
            }
            else{
              System.out.print(m[i][j]+" ");
            }
          }
          System.out.println();
        }
        System.out.println();
        if(cn>9)return;
      }

の肯定部分と否定部分に対応します。

否定部分だけ解説しておきましょう。


は入れ子式人形の一番内側の人形です。
つまり、ここまで進んでときは魔方陣が完成したことを意味します。
ですので、
       cn++;
        int j;
        for(i=0;i<n;i++){
          for(j=0;j<n;j++){
            if(m[i][j]<10){
              System.out.print(" "+m[i][j]+" ");
            }
            else{
              System.out.print(m[i][j]+" ");
            }
          }
          System.out.println();
        }
        System.out.println();
        if(cn>9)return;

が果たす仕事は、魔方陣総数をカウントしてコンソールへ表示させることです。
入門
そして、総数が10個になったら魔方陣探索をやめさせることも任務としています。



さて、以上で末項確定法すなわち魔方陣汎用的生成プログラムVer.3の解説は終了とします。

そして、これをもってJava 入門第2部も終了とさせて頂き、
次話から第3部に進みます。
第3部ではグラフィックを主テーマにして、グラフィックを利用したゲームなどに挑戦します。
また、魔方陣汎用的生成プログラムVer.4=一般種法によって、Ver.3比で1万倍から数千倍化を図り,
14次魔方陣まで生成できるようにするという講も第3部のひとつの講になります。


第5話へ 第3部第21講第1話へ

戻る

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

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部