第16講 魔方陣汎用的生成プログラムへの挑戦
第1話 for文版を汎用性のある版に変更するには?
for文版で3次魔方陣の自動生に挑戦したときは、とっても大変でした。
for文版ではとても、4次魔方陣に挑戦する気力は沸きません。
何しろ、16次元ループになってしまうのですから。
第10講で学んだ関数の再帰的呼び出しを使えば、理論的には10次魔方陣であろうと1000次魔方陣でも作成可能です。
キーボーから次数を入力すれば、何次魔方陣でも作成できるのです。
ただし、それは理論的な話でして、実際には5次あたりが限界です。
しかも、3・4次はすべて作成させることはできますが、5次においては100個生産できたたら止める等が必要です。
鏡像なども別と数えれば5次魔方陣は20億程度存在しますので、すべて作り出すことはできないわけです。
100個に限定したとしても、10分程度かかってしまいます。
ただし、前にも申し上げましたが、工夫をすれば作成速度は、1万倍、1億倍、1京(億の1万倍)倍と伸ばしていくことができます。
私の最速魔方陣自動生成プログラムは26次魔方陣を1秒に数百の単位で作り出します。
この第16講で作る魔方陣自動生成プログラムの1000京倍を遙かに上回るぐらい速いでしょう。
皆さんもこの入門講義を粘り強く読み続けるなら、超速の魔方陣作成プログラムが組めるようになります。

第10個でn次順列の作成に挑戦しました。
そのn×n次順列を2次元に並べて、縦・横・対角線の合計が同じになるものを探してやればよいのです。

今回挑戦する方法は、まさに力業です。

1 2 3
4 5 6
7 8 9



1 2 3
4 5 6
7 9 8



1 2 3
4 5 6
8 7 9



1 2 3
4 5 6
8 9 7



1 2 3
4 5 6
9 7 8













1 2 3
4 5 6
9 8 7



1 2 3
4 5 7
6 8 9



1 2 3
4 5 7
6 9 8



1 2 3
4 5 7
8 6 9



1 2 3
4 5 7
8 9 6












...

しかし、どのようにしたらn×n次順列を2次元に並べることができるでしょうか。

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

セル番号を2次元の座標(x、y)に対応させればそれは可能です。




第15講第7話へ 第2話へ

戻る

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

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