第21講 末項確定法
第3話 f2解答例
void f2(int g){
if(s==100)return;
int i,j,k,h,wa,kk,kkk,m,yy,hh,sa;
yy=a1[y[g]][x[g]];
array<String^>^ w=gcnew array<String^>(16);
if(g==n-1){
wa=0;
for(j=0;j<n-1;j++){
wa+=a2[j][j];
}
sa=n*(n-1)/2-wa;
if(sa<0 || sa>n-1)return;
if(p[yy][sa]==1)return;
if(cn2[sa]>n-1)return;
a2[y[g]][x[g]]=sa;
p[yy][sa]=1;
cn2[sa]++;
f2(g+1);
cn2[sa]--;
p[yy][sa]=0;
return;
}
if(y[g]==n-1 && x[g]==0){
wa=0;
for(j=0;j<n-1;j++){
wa+=a2[j][n-1-j];
}
sa=n*(n-1)/2-wa;
if(sa<0 || sa>n-1)return;
if(p[yy][sa]==1)return;
if(cn2[sa]>n-1)return;
a2[y[g]][x[g]]=sa;
p[yy][sa]=1;
cn2[sa]++;
f2(g+1);
cn2[sa]--;
p[yy][sa]=0;
return;
}
if(y[g]==0 && x[g]==n-2){
wa=0;
for(j=0;j<n-2;j++){
wa+=a2[0][j];
}
wa+=a2[0][n-1];
sa=n*(n-1)/2-wa;
if(sa<0 || sa>n-1)return;
if(p[yy][sa]==1)return;
if(cn2[sa]>n-1)return;
a2[y[g]][x[g]]=sa;
p[yy][sa]=1;
cn2[sa]++;
f2(g+1);
cn2[sa]--;
p[yy][sa]=0;
return;
}
if(y[g]==n-2 && x[g]==0){
wa=0;
for(j=0;j<n-2;j++){
wa+=a2[j][0];
}
wa+=a2[n-1][0];
sa=n*(n-1)/2-wa;
if(sa<0 || sa>n-1)return;
if(p[yy][sa]==1)return;
if(cn2[sa]>n-1)return;
a2[y[g]][x[g]]=sa;
p[yy][sa]=1;
cn2[sa]++;
f2(g+1);
cn2[sa]--;
p[yy][sa]=0;
return;
}
if(y[g]>0 && y[g]<n-1 && x[g]==n-1){
wa=0;
for(j=0;j<n-1;j++){
wa+=a2[y[g]][j];
}
sa=n*(n-1)/2-wa;
if(sa<0 || sa>n-1)return;
if(p[yy][sa]==1)return;
if(cn2[sa]>n-1)return;
a2[y[g]][x[g]]=sa;
p[yy][sa]=1;
cn2[sa]++;
f2(g+1);
cn2[sa]--;
p[yy][sa]=0;
return;
}
if(x[g]>0 && x[g]<n-1 && y[g]==n-1){
wa=0;
for(j=0;j<n-1;j++){
wa+=a2[j][x[g]];
}
sa=n*(n-1)/2-wa;
if(sa<0 || sa>n-1)return;
if(p[yy][sa]==1)return;
if(cn2[sa]>n-1)return;
a2[y[g]][x[g]]=sa;
p[yy][sa]=1;
cn2[sa]++;
if(g<n*n-1){
f2(g+1);
}
else{
for(j=0;j<n;j++){
for(k=0;k<n;k++){
w[k]=(n*a1[j][k]+a2[j][k]+1).ToString();
}
dataGridView1->Rows->Add(w);
}
for(j=0;j<16;j++)w[j]=L"";
dataGridView1->Rows->Add(w);
s++;
if(s==100)return;
}
cn2[sa]--;
p[yy][sa]=0;
return;
}
kk=rand()%n;
m=n/2;
for(i=0;i<n;i++){
kkk=(kk+i)%n;
a2[y[g]][x[g]]=kkk;
h=1;
cn2[kkk]++;
if(cn2[kkk]>n)h=0;
hh=0;
if(h==1){
if(p[yy][kkk]==0){
p[yy][kkk]=1;
hh=1;
}
else{
h=0;
}
}
if(h==1)f2(g+1);
if(hh==1)p[yy][kkk]=0;
cn2[kkk]--;
}
}
ダウンロードファイルForm5.h(フォルダに貼り付けるときはForm1.hに名称を変更してください。)
第21講第2話へ 第21講第4話へ
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座