members

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;
   }

コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2019-06-19 (水) 15:49:52 (67d)