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


第7話 行の条件(横の条件)を加える
コード
#pragma endregion
  private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
           int i,j;
           array<String^>^ x=gcnew array<String^>(15);
           for(i=1;i<14;i++){
             if(i%4==1)for(j=0;j<13;j++)x[j]=L"*";
             if(i%4!=1)for(j=1;j<13;j++){
               if(j%4==1)x[j]=L"*";
               if(j%4!=1)x[j-1]=L"";
             }
             dataGridView1->Rows->Add(x);
           }
        }

        private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
           int i,j;
           for(i=0;i<15;i++)dataGridView1->Rows->Add();
           array<String^,2>^ w=gcnew array<String^,2>(15,100);
           for(i=0;i<14;i++){
             for(j=0;j<14;j++){
               w[i,j]=static_cast<String^>(dataGridView1[j,i]->Value);
             }
           }
           for(i=0;i<14;i++){
             for(j=0;j<14;j++){
               dataGridView1[j,15+i]->Value=w[i,j];
             }
           }
           char k1=0,k2,a[9][9];
           char k,h,l;
           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]=int::Parse(w[i,j]);
                       if(w[i,j]==L"")a[i-k1][j-k2]=0;
                     }
                   }
                 }
               }
             }
           }
            k1=0;
            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(a[i-k1][j-k2]==0){
                       for(k=1;k<10;k++){
                         h=1;
                         if(j-k2>0){
                           for(l=0;l<j-k2;l++){
                             if(a[i-k1][l]==k){
                               h=0;
                               break;
                             }
                           }
                         }
                         if(h==1){
                           if(j-k2+1<8){
                             for(l=j-k2+1;l<9;l++){
                               if(a[i-k1][l]==k){
                                 h=0;
                                 break;
                               }
                             }
                           }
                         }
                         if(h==1){
                           a[i-k1][j-k2]=k;
                           dataGridView1[j,15+i]->Value=a[i-k1][j-k2];
                         }
                       }
                     }

                    }
                  }          
                }
              }
            }
        }
  };
}
実行例
初心者
初心者

確かに、行(横)の条件を満たしています。
そこで、また課題です。
次は、列(縦)の条件を加えてください。
尚、コードの解説は次話で。

ダウンロード用参考ファイルForm1.h


第6話へ 第8話へ

戻る

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