• 締切済み

N王妃システムの解のタイム計算

先輩方にご協力をお願いしたく書き込みさせていただきます。 #include <stdio.h> #define FREE 0 #define BUSY 1 #define N 8 int q_pos[N+1]; int colum[N+1]; int r_up[2*N]; int r_dw[2*N]; void disp(void) { int y,x; static count = 0; printf("\n解 %d\n", ++count); for(y=1;y<=N; y++){ for(x=1;x<=N; x++){ if (q_pos[y] == x)printf("○"); else printf("×"); } printf("\n"); } } void eight_queens(int y) { int x; for (x=1; x<=N; x++){ if(colum[x]==FREE && r_up[y+x-1]==FREE && r_dw[y-x+N]==FREE){ q_pos[y]=x; if (y>=N) disp(); else{ colum[x]=BUSY; r_up[y+x-1]= r_dw[y-x+N]=BUSY; eight_queens(y+1); colum[x]=FREE; r_up[y+x-1]= r_dw[y-x+N]=FREE; } } } } int main(void) { int i; for(i=1;i<=N; i++) colum[i]=FREE; for(i=1;i<2*N;i++) r_up[i]= r_dw[i]=FREE; eight_queens(1); return 0; } こちらのプログラムに #include<stdio.h> #include<stdlib.h> #include<time.h> void sleep(clock_t wait); void main(void) { int i,j,n; time_t start,finish; double duration,v; printf("繰り返し回数は>"); scanf("%d",&n); time(&start); v=1.01; for(i=0; i<n; i++) { if(((i+1)% 10)==0) { fprintf(stdout,"."); fflush(stdout); } for(j=0; j<n; j++) { v *=1.0001; } } printf("\n"); time(&finish); duration=difftime(finish,start); printf("計算にかかった時間は約%6.2f 秒です \n", duration); } のプログラムを合体させ、1つのプログラムを完成させたいのですが、どのような配列にしたらいいのか教えて欲しいです>< アルゴリズムとしては、チェスのN王妃のプログラムから解を導きだすと同時に、そのプログラムを起動してから終わりまでのタイムを計算するプログラムを挿入すると言う内容です。 長くてすいません;;

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.1

>チェスのN王妃のプログラムから解を導きだすと同時に、そのプログラムを起動してから終わりまでのタイムを計算するプログラム 8クイーンの場合、クイーン数がさほど多くないので、 プログラム実行時間のほとんどは結果を出力に費やしていると思います。 今回計測しようとしている実行時間には、結果出力に要する時間を含みますか?それとも、計算に要する時間だけですか?

kaminagimi
質問者

お礼

asuncion様お気づきでしたら、再度立て直しましたので、ご回答よろしくお願いします。

kaminagimi
質問者

補足

えっと プログラムは8クイーンなのですが 4から12の解を導き、違いを探すことが主な課題です; ですので、プログラムを起動して、解を導きだすまでの時間を測定するので、計算に要する時間だけで十分と思われます。。。 ようは上のプログラムに、下のプログラムをおりまぜて、1つのプログラムにし、起動したら解とタイムが同時に測定できるようにしたいです><

関連するQ&A