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


第8話 
問題全体構造解析に基づく入力順を構築するコード例1
  private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
                   ・
                   ・
                   ・
           s=0;
           zentaikouzoukaiseki();
           for(i=0;i<15;i++)dataGridView1->Rows->Add();
          
nyuryokujyunkoutiku();
           
//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 nyuryokujyunkoutiku(){
          char i,j,k,gcn=0;

          for(i=1;i<10;i++){
            for(j=0;j<9;j++){
              for(k=0;k<9;k++){
                if(b[j][k]==i){
                  zy[gcn]=j;
                  zx[gcn]=k;
                  gcn++;
                }
              }
            }
          }
          //以下は入力順の構築に成功しているかどうか確認のためのもの。成功が確認されたら削除する。
          char k1=0,k2=0;
          for(i=0;i<4;i++)for(j=0;j<13;j++)dataGridView1[j,4*i+28]->Value=L"*";
          for(i=0;i<4;i++)for(j=0;j<13;j++)dataGridView1[4*i,j+28]->Value=L"*";
          for(i=0;i<cn;i++){
            if(a[zy[i]][zx[i]]==0){
              if(zx[i]<3)xx=zx[i];
              if(zx[i]>2 && zx[i]<6)xx=zx[i]+1;
              if(zx[i]>5 && zx[i]<9)xx=zx[i]+2;
              if(zy[i]<3)yy=zy[i];
              if(zy[i]>2 && zy[i]<6)yy=zy[i]+1;
              if(zy[i]>5 && zy[i]<9)yy=zy[i]+2;
              dataGridView1[xx+1,yy+29]->Value=i;
            }
          }
          for(i=0;i<81;i++){
            if(a[i/9][i%9]>0){
              if(i/9<3)yy=i/9;
              if(i/9>2 && i/9<6)yy=i/9+1;
              if(i/9>5 && i/9<9)yy=i/9+2;
              if(i%9<3)xx=i%9;
              if(i%9>2 && i%9<6)xx=i%9+1;
              if(i%9>5 && i%9<9)xx=i%9+2;
              dataGridView1[xx+1,yy+29]->Value=L"/";
            }

          }
        }

                   ・
                   ・
                   ・
実行例
c++入門

簡単な方のコードを先に示しました。

第7話へ 第9話へ 


戻る

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