数独を解く(1:二次元の配列の出力)

C言語では、変数は定義して使用することになる。 一次元の配列はこの中で配列は 二次元の配列は、
   int  ar[20][20];  // 二次元の整数配列を 20 x 20 用いる。
のように定義されます。これは、メモリの中に次のような形で領域を確保する。
2D memory
これは、 一次元の配列は、
   int  ar[400];
でメモリの中に次のような形で領域を確保した者と同じである。
1D memory
同じような配列の確保に、二次元の配列では、
   int  *ar[20];  // 一次元の整数へのポインター配列を 20 用いる。
であるが、これも上と異なる。
1D memory
これらを用いるが、ダイナミックにメモリを用いることができる 多次元では次元が増えるごとに多重割り当て(allocの複数呼び出し)と解放時の 処理が複雑である。 もっとも簡単なのが、1次元である。 ここでは、これを二次元的に使う。
int ncolm;   // 正方形配列のサイズ 
int *array;  // 確保されたメモリ

{
    int  i, j;

    printf("%2d\n", ncolm);
    for (i = 0; i < ncolm; i++)
        for (j = 0; j < ncolm; j++) {
             int k = 1D memory * 1D memory + j;
             printf("%2d ", *(ar + k));
        }
    1D memory
}

....
出力は
 9
 0  4  7  6  0  0  0  5  0
 8  0  3  0  0  0  0  0  2
 0  0  0  0  0  9  0  0  0
 0  0  0  8  0  5  0  0  6
 0  0  0  1  0  0  0  0  0
 6  0  2  4  0  0  0  0  0
 0  7  8  0  0  0  5  1  0
 0  0  6  0  0  0  0  4  0
 0  9  0  0  0  4  0  0  7
である。 1D memoryに何が入るか考えよう。
では、
      1D memory
と表示するにはどうするのか、枠のサイズが9ではなく、任意の n^2 という量な らどうするのか考えてみよう。

Copyright 2006 Ken Kishimoto