C言語関係掲示板

過去ログ

No838 二次元配列の魔方陣のプログラム

[戻る] [ホームページ]
No.10633

二次元配列の魔方陣のプログラムについて詳しくわかりやすくしりたいのですが。。。
投稿者---C++shiee(2003/11/18 10:38:49)


初めて投稿するものなんですが、C言語
初心者で詳しく魔方陣のプログラミングに
ついて詳しく(できれば図やプログラムを
入れてくれるとわかりやすいんですが、
どなたかくわしく教えていただけないでしょうか。

No.10634

Re:二次元配列の魔方陣のプログラムについて詳しくわかりやすくしりたいのですが。。。
投稿者---雀nk(2003/11/18 11:17:50)


「魔方陣」「C」とかで検索しましたか?

http://www5b.biglobe.ne.jp/~suugaku/mahouhinn/oldhp.htm

No.10780

Re:二次元配列の魔方陣のプログラムについて詳しくわかりやすくしりたいのですが。。。
投稿者---C++shiee(2003/11/25 10:17:51)


一応検索してみたんですがこのプログラム
#include<stdio.h>
    
void main()
{
    static int mg[16][16],ii=1,jj,nn,kk;
    
    printf("15以下の奇数を入力してください!\n");
    scanf("%d",&nn);
    jj=(nn+1)/2;
    mg[1][jj]=1;
    for(kk=2;kk<=nn*nn;kk++){
        if(kk%nn==1)
            ii++;
        else if(ii==1){
            ii=nn;
            jj++;
        }
        else if(jj==nn){
            ii--;
            jj=1;
        }
        else  {
            ii--;
            jj++;
        }
        mg[ii][jj]=kk;
    }
    for(ii=1;ii<=nn;ii++){
        printf("\n");
        for(jj=1;jj<=nn;jj++)
            printf("%5d",mg[ii][jj]);
    }
} 
の記述の説明がどこにも載ってないんですよ
だれかこのプログラムについて解説して
もらえないでしょうか??

No.10781

Re:二次元配列の魔方陣のプログラムについて詳しくわかりやすくしりたいのですが。。。
投稿者---YuO(2003/11/25 12:12:12)


>一応検索してみたんですがこのプログラム
(snip)
>の記述の説明がどこにも載ってないんですよ
>だれかこのプログラムについて解説して
>もらえないでしょうか??

奇数幅の魔方陣作成の有名なアルゴリズムですな。
  • 1を最上列の中央に置く。
  • i+1はiの右上に置く。ただし
    • iが右上端にある場合とiの右上が既に埋まっている場合はi+1を下の列に置く。
    • iが最上列にある場合はi+1を右の行の最下列に置く。
    • iが最右行にある場合はi+1を上の列の最左列に置く。

ここで,例外の一つ目は幅がNならiがkNの時に発生します。
#kk%nn=1の部分。
これらをコードにしたのが,先のプログラムだと思います。