|
N王妃問題の組み合わせを数え上げるプログラムを作りました。 試作品1号冒頭の「#define N 12」で1辺の長さを指定しています。 #include <stdio.h>
#define N 12
int main(){
signed int v0[N],v1[N]={0},v2,v3,v4,v5[N],v6=0;
while(1){
for(v2=0;v2<N;v2++){
v0[v2]=v2;
}
for(v2=0;v2<N;v2++){
for(v3=v4=0;;){
if(v0[v4]!=N){
if(v3==v1[v2]){
break;
}
v3++;
}
v4++;
}
v5[v2]=v0[v4];
v0[v4]=N;
}
for(v2=0;v2<N;v2++){
for(v3=0;v3<v2;v3++){
if(v5[v2]+v2==v5[v3]+v3||v5[v2]-v2==v5[v3]-v3){
goto l0;
}
}
}
l0:
if(v2==N){
v6++;
v1[N-1]++;
for(v2=1;v2<=N;v2++){
if(v1[N-v2]==v2){
v1[N-v2]=0;
if(v2==N){
goto l1;
}else{
v1[N-v2-1]++;
}
}
}
}else{
v1[v2]++;
for(v2++;v2<N;v2++){
v1[v2]=0;
}
for(v2=1;v2<=N;v2++){
if(v1[N-v2]==v2){
v1[N-v2]=0;
if(v2==N){
goto l1;
}else{
v1[N-v2-1]++;
}
}
}
}
}
l1:
printf("%d",v6);
return 0;
}
|