第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入門講義(基礎から応用まで)