Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • 締切済み

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

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

厳密にいうと time や difftime の呼び出しのためにではなくそこで使う time_t のために time.h を #include せにゃならんのだけども, #2 のヒントの 1行目 「かかった時間を下のプログラムがどうやって測定しているかは分かりますか?」 というところを自分で考えてみてください. もっというと, 下のプログラムでは「何にかかった時間を測っているのか」理解してください. 「例題だけ見ても解決できない」っていうけど, 「見る」だけじゃダメなんだよ. 「何をどのように実行しているのか」をきちんと理解しないと.

すると、全ての回答が全文表示されます。
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

ヒントだけ。 かかった時間を下のプログラムがどうやって測定しているかは分かりますか? 2カ所あるtime()の呼び出しと、difftime()が鍵です。 また、これらの関数を使用するためには#include <time.h>が必要です。 詳しくは http://www.linux.or.jp/JM/html/LDP_man-pages/man2/time.2.html http://www.linux.or.jp/JM/html/LDP_man-pages/man3/difftime.3.html あたりを参照のこと。

kaminagimi
質問者

補足

double difftime(time_t time1, time_t time0) このプログラムは私自身調べてたのですが 現状プログラムにどうやって差し込めばいいのかわからずじまいでいます… 例題だけ見ても中々解決できてないです;;

すると、全ての回答が全文表示されます。

関連するQ&A