第33講 数独(ナンバープレイス)問題解決ソフトVer.4の制作
(数独(ナンバープレイス)問題作成ソフトに挑戦する人は☆☆)
第9話 Ver.7コード解説その7=逆部分構造解析行部分解説
void gyakububunkouzoukaiseki(char
g){
register char i,j;
char x,y,xs,ys;
x=iz[g];
y=jz[g];
ys=y/3;
xs=x/3;
for(i=0;i<9;i++){
if(a[i][y]==0){
if(h1[g][i]==1){
lst[i][y][a[x][y]-1]=0;
b[i][y]++;
if(b[i][y]==2)chs--;
}
}
}
for(i=0;i<9;i++){
if(a[x][i]==0){
if(h2[g][i]==1){
lst[x][i][a[x][y]-1]=0;
b[x][i]++;
if(b[x][i]==2)chs--;
}
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if((3*ys+j!=y) &&
(3*xs+i!=x) && (a[3*xs+i][3*ys+j]==0)){
if(h3[g][i][j]==1){
lst[3*xs+i][3*ys+j][a[x][y]-1]=0;
b[3*xs+i][3*ys+j]++;
if(b[3*xs+i][3*ys+j]==2)chs--;
}
}
}
}
}
逆部分構造構造解析の名称を使っていますが、
実際にやっていることは、部分構造解析のキャンセルです。
つまり、部分構造解析において
lst[4][0][0]=2,lst[4][0][1]=9,lst[4][0][2]=8,lst[4][0][3]=7
としたら、
lst[4][0][0]=2,lst[4][0][1]=7,lst[4][0][2]=8,lst[4][0][3]=9
としているのです。b[i][y]++;
第8話へ 第34講第1話へ
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)