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