第10講 関数の再帰的使用による魔方陣の自動生成
第3話 n次准准魔方陣自動生成ソフト
n次准准魔方陣生成ソフトコード例
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使うために必要なお呪い
void f(int g);
int x[25];
int n, cn;
int main() {
  cout << "これはすべてのn次准准魔方陣を求めるソフトです。" << endl;
  cout << "何のn次准准魔方陣を発生させるのかをnに入力してエンターして下さい。" << endl;
  cout << "n=";
  scanf("%d", &n);
  cn = 0;
  f(0);
  cout << "生成された" << n << "次准准魔方陣" << cn << "個です。" << endl;
  return(0);
}
void f(int g) {
  int i, j,k, h,
hh,w;
  for (i = 0; i<n*n; i++) {
    if (g == 0)x[g] = i + 1;
    h = 1;
    if (g>0) {
      for (j = 0; j<g; j++) {
        if (x[j] == i + 1) {
          h = 0;
          break;
        }
      }
      if (h == 1)x[g] = i + 1;
    }
    if (h == 1) {
      if (g + 1 < n*n) {
        f(g + 1);
      }
      else {
        
hh=1;
        for (j = 0; j < n; j++) {
          w=0;
          for (k = 0; k < n; k++) {
            w+=x[n*j+k];
          }
          if(w!=n*(n*n+1)/2){
            hh=0;
            break;
          }
        }

        
if(hh==1){
          for (j = 0; j < n; j++) {
            for (k = 0; k < n; k++) {
              cout << x[n*j + k] << " ";
            }
            cout << endl;
          }
          cout << endl;
          cn++;
        }

      }
    }
  }
}
実行結果例
これはすべてのn次准准魔方陣を求めるソフトです。
何次の准准魔方陣を発生させるのかをnに入力し
エンターするとn次准准魔方陣がすべて生成されます。
n=2
1 4
2 3

1 4
3 2

2 3
1 4

2 3
4 1

3 2
1 4

3 2
4 1

4 1
2 3

4 1
3 2

生成された2次准准魔方陣は8個です。


2次准准魔方陣は8個存在し、
3次准准魔方陣は2592個存在することがわかりました。

さて、列(縦)合計の条件を加えて、
准魔方陣生成ソフトに変更しましょう。
果たして2次准魔方陣は存在するのでしょうか。


第2話へ   第4話へ

002

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

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C**入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC**による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ