第18講 対角線法による魔方陣自動生成速度の1万倍加へ

第5話 座標作成と座標作成が上手くいっていることを確認するコード

実行画面
n=9
00 17 18 19 20 21 22 23 09
24 01 25 26 27 28 29 10 30
31 32 02 33 34 35 11 36 37
38 39 40 03 41 12 42 43 44
45 46 47 48 04 49 50 51 52
53 54 55 13 56 05 57 58 59
60 61 14 62 63 64 06 65 66
67 15 68 69 70 71 72 07 73
16 74 75 76 77 78 79 80 08

を実現するプログラム例
#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
void f(int g); //魔方陣を作り出す社員
void hy(); //出来た順列をコンソールに表示させる社員
void zy(); //座標作成社員
void hy1(int a[10][10]); //番号付けが上手くいっているかを確認する社員
void g(); //座標作りが正しく出来ているかを確認する確認する社員
int cn,n;
int m[10][10]; //少し大きめに配列要素数を取っておく
int y[100],x[100];
int main(){
      ・・・
}
void zy(){ //座標作成社員
        ・・・
  for(i=0;i<n;i++){
    for(j=0j;j<n;j++){
      y[a[i][j]]=i;
      x[a[i][j]]=j;
    }
  }

  g();
}
void hy1(int a[10][10]){
        ・・・
}
void g(){
  int i,a[10][10];
  for(i=0;i<n*n;i++){
    a[y[i]][x[i]]=i;
  }

  hy1(a);
}
void f(int g){
     ・・・

座標作成と座標作成が上手くいっているかを確認するプログラム例

  for(i=0;i<n;i++){
    for(j=0j;j<n;j++){
      y[a[i][j]]=i;
      x[a[i][j]]=j;
    }
  }


  for(i=0;i<n*n;i++){
    a[y[i]][x[i]]=i;
  }

の手法是非とも頭にたたき込みましょう。

さて、いよいよ対角線法によって、
第10講第9話添付ファイルを改善しましょう。
尚、改善効果を調べるために、
両方に時間計測機能を付けてください。
尚、
void f(int g){
    ・・・
}
のコードは大幅に変わります。
入力順が変わっているからです。

   0
0 0 13 14 15 16 17 7
1 18 1 19 20 21 8 22
2 23 24 2 25 9 26 27
3 28 29 30 3 31 32 33
4 34 35 10 36 4 37 38
5 39 11 40 41 42 5 43
6 12 44 45 46 47 48 6



また、時間比較のために
srand(1);

srand((unsigned) time(NULL));
とはせずに比較してから変更しましょう。


第10講第8話版の場合の実行結果

01 11 14 08

10 04 07 13
15 05 02 12
01 11 16 06
08 14 09 03

10 04 07 13
15 05 02 12
06 16 11 01
03 09 14 08

生成された4次魔方陣=10
魔方陣生成にかかった4時間は1.111000秒です。


対角線法の場合の実行結果
03 14 02 15

10 13 08 03
16 04 09 05
01 15 06 12
07 02 11 14

10 13 08 03
05 04 09 16
12 15 06 01
07 02 11 14

生成された4次魔方陣=10
魔方陣生成にかかった4時間は0.036000秒です。

第10講版が1.111000秒に対して、
対角線版は0.036000秒と圧勝しています。
およそ31倍です。
5次以降では、もっと大幅な改善効果があり、
1万倍や1億倍はあるでしょう。

第4話へ 第6話へ

a


初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ