第31講 数独(ナンバープレイス)問題解決ソフトVer.2の制作
(数独(ナンバープレイス)問題作成ソフトに挑戦する人は☆☆)


第10話 
数独問題解決ソフトVer.2の完成
  private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
                   ・
                   ・
                   ・
           char k1=0,k2;
           DateTime^ hj=DateTime::Now; //開始時間
           for(i=0;i<13;i++){
             if(i%4==0)k1++;
               if(i%4!=0){
                 k2=0;
                 for(j=0;j<13;j++){
                    if(j%4==0)k2++;
                    if(j%4!=0){
                      if(w[i,j]!=L"")a[i-k1][j-k2]=char::Parse(w[i,j]);
                      if(w[i,j]==L""){
                      a[i-k1][j-k2]=0;
                      
cn++; //空白セル数のカウント 次の入力順構築のときに使う
                    }      
                 }
               }
             }
           }
           s=0;
           zentaikouzoukaiseki();
           nyuryokujyunkoutiku(0);
           
f(0);   
           DateTime^ ow=DateTime::Now; //終了時間
           TimeSpan sa=ow->Subtract(*hj); //経過時間の計算
           dataGridView1[30,25]->Value=L"解答作成時間";
           dataGridView1[30,26]->Value=sa.TotalSeconds.ToString();
          

           if(s==2)dataGridView1[30,27]->Value=L"解答が複数存在する";
           if(s==2)dataGridView1[30,14]->Value=L"不適切な問題です。";
           if(s==0)dataGridView1[30,27]->Value=L"解答が存在しない";
           if(s==0)dataGridView1[30,14]->Value=L"不適切な問題です。";
        
}
                  ・
                  ・
                  ・
         void f(char g){
           if(s==2)return;
           char x,y;
           x=g%9;
           y=g/9;
           char h,i,j,k,k1,k2,ii,rlst[y][x][iii];
           if(a[y][x]>0){
             if(g+1<81){
               f(g+1);
             }
             else{
               k1=0;
               for(i=0;i<13;i++){
                 if(i%4==0){
                   k1++;
                   for(j=0;j<13;j++)dataGridView1[j,i+14]->Value=L"*";
                 }
                 if(i%4>0){
                   k2=0;
                   for(j=0;j<13;j++){
                     if(j%4==0){
                       dataGridView1[j,i+14]->Value=L"*";
                       k2++;
                     }
                     if(j%4>0){
                       dataGridView1[j,i+14]->Value=a[i-k1][j-k2];
                     }
                   }
                 }
               }
               s++;
               if(s==2)return;
             }
           }
           if(a[y][x]==0){
             
ii=rand()%b[y][x];
             for(i=1;i<10;i++){
               rlst[y][x][iii]=(i+ii)%b[y][x];
               h=1;
               if(x>0){
                 for(j=0;j<x;j++){
                   if(a[y][j]==rlst[y][x][iii]){
                     h=0;
                     break;
                   }
                 }
               }
               if(h==1){
                 if(x+1<8){
                   for(j=x+1;j<9;j++){
                     if(a[y][j]==rlst[y][x][iii]){
                       h=0;
                       break;
                     }
                   }
                 }
               }
               if(h==1){
                 if(y>0){
                   for(j=0;j<y;j++){
                     if(a[j][x]==rlst[y][x][iii]){
                       h=0;
                       break;
                     }
                   }
                 }
               }
               if(h==1){
                 if(y+1<8){
                   for(j=y+1;j<9;j++){
                     if(a[j][x]==rlst[y][x][iii]){
                       h=0;
                       break;
                     }
                   }
                 }
               }
               if(h==1){
                 for(j=0;j<3;j++){
                   if(j!=ya){
                     for(k=0;k<3;k++){
                       if(k!=xa){
                         if(a[3*ys+j][3*xs+k]>0){
                           if(a[3*ys+j][3*xs+k]==rlst[y][x][iii]){
                             h=0;
                             break; 
                           }
                         }
                       }
                     }
                     if(h==0)break;
                   }
                 }
               }
               if(h==1){
                 a[y][x]=rlst[y][x][iii];
                 if(g+1<81){
                   f(g+1);
                 }
                 else{
                   k1=0;
                   for(i=0;i<13;i++){
                     if(i%4==0){
                       k1++;
                       for(j=0;j<13;j++)dataGridView1[j,i+14]->Value=L"*";
                     }
                     if(i%4>0){
                       k2=0;
                       for(j=0;j<13;j++){
                         if(j%4==0){
                           dataGridView1[j,i+14]->Value=L"*";
                           k2++;
                         }
                         if(j%4>0){
                           dataGridView1[j,i+14]->Value=a[i-k1][j-k2];
                         }
                       }
                     }
                   }
                   s++;
                   if(s==2)return;
                 }
                 a[y][x]=0;
               }
             }
           }
         }
  };
}

以降は、2011/11/13訂正しました。それ以前ダウンロードされた方お手数ですがもう一ダウンロードお願いします。
ダウンロード用参考ファイル(第8話コード版)Form1.h  
ダウンロード用参考実行(第8話コード版)実行ファイル(EXEファイル)
ダウンロード用参考ファイル(第9話コード版)Form1.h
ダウンロード用参考実行(第9話コード版)実行ファイル(EXEファイル)


第9話へ 第11話へ


戻る

VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)