第27講 数独(ナンプレ)自動生成
第12話 新しい番号付けとそれに対応する座標を設定するプログラムの解説その4
では、次ぎに
for(i=0;i<3;i++){
for(j=0;j<3;j++){
for(k=0;k<3;k++){
for(l=0;l<3;l++){
a[3*i+k][3*j+l]=9*(3*i+j)+3*k+l;
}
}
}
}
の動きをトレースしてみましょう。
i=0のとき
j=0のとき
k=0のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+0][3*0+0]=a[0][0]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*0+0=0
から、a[0][0]=0
l=1のとき
a[3*i+k][3*j+l]=a[3*0+0][3*0+1]=a[0][1]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*0+1=1
から、a[0][1]=1
l=2のとき
a[3*i+k][3*j+l]=a[3*0+0][3*0+2]=a[0][2]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*0+2=2
から、a[0][2]=2
ここまでは前回と全く同じ動きです。
変わるのはここからです。
k=1のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+1][3*0+0]=a[1][0]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*1+0=3
から、a[1][0]=3
l=1のとき
a[3*i+k][3*j+l]=a[3*0+1][3*0+1]=a[1][1]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*1+1=4
から、a[1][1]=4
l=2のとき
a[3*i+k][3*j+l]=a[3*0+1][3*0+2]=a[1][2]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*1+2=5
から、a[1][2]=5
k=2のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+2][3*0+0]=a[2][0]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*2+0=6
から、a[2][0]=6
l=1のとき
a[3*i+k][3*j+l]=a[3*0+2][3*0+1]=a[2][1]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*2+1=7
から、a[2][1]=7
l=2のとき
a[3*i+k][3*j+l]=a[3*0+2][3*0+2]=a[2][2]
9*(3*i+j)+3*k+l=9*(3*0+0)+3*2+2=8
から、a[2][2]=8
j=1のとき
k=0のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+0][3*1+0]=a[0][3]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*0+0=9
から、a[0][3]=9
l=1のとき
a[3*i+k][3*j+l]=a[3*0+0][3*1+1]=a[0][4]
9*(3*i+j)+3*k+l=9*(3*0+1)+0*1+1=10
から、a[0][4]=10
l=2のとき
a[3*i+k][3*j+l]=a[3*0+0][3*1+2]=a[0][5]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*0+2=11
から、a[0][5]=11
k=1のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+1][3*1+0]=a[1][3]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*1+0=12
から、a[1][3]=12
l=1のとき
a[3*i+k][3*j+l]=a[3*0+1][3*1+1]=a[1][4]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*1+1=13
から、a[1][4]=13
l=2のとき
a[3*i+k][3*j+l]=a[3*0+1][3*1+2]=a[1][5]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*1+2=14
から、a[1][5]=14
k=2のとき
l=0のとき
a[3*i+k][3*j+l]=a[3*0+2][3*1+0]=a[2][3]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*2+0=15
から、a[2][3]=15
l=1のとき
a[3*i+k][3*j+l]=a[3*0+2][3*1+1]=a[2][4]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*2+1=16
から、a[2][4]=16
l=2のとき
a[3*i+k][3*j+l]=a[3*0+2][3*1+2]=a[2][5]
9*(3*i+j)+3*k+l=9*(3*0+1)+3*2+2=17
から、a[2][5]=17
本話はここまで。