発生している問題・エラーメッセージ
最大流量を求めるようなプログラムを作っています。
ransuuという関数で、adjacency matrixに格納されている数字が1だったら、flowing matrixに100までの数字をランダム格納したいのですが、以下の表を見ると1なのに値が格納されていない部分があります。
もしわかる方いましたら、回答をお願いします。
Adjacency Matrix: 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 1 0 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 1 1 0 1 0 0 0 0 0 1 0 Flowing Matrix: 0 0 0 0 0 0 55 28 0 59 0 51 57 0 11 56 93 71 0 0 3 63 54 0 0 0 0 99 75 38 0 0 24 49 54 17 0 26 0 0 6 0 74 0 0 86 79 0 39 0 60 35 0 83 0 0 16 0 0 0 0 84 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
該当のソースコード
c
1#define visit 1 2#define nonvisit 0 3#define stop 2 4#define M 5 5 6int i,j,k,min,sum=0; 7int a[M][M],v[M],r[M][M],b[M],d[M]; 8clock_t start_clock, end_clock; 9 10void ransuu(int N){ 11 printf("Adjacency Matrix:\n"); 12 for(i = 1; i <= N; i++){ 13 for(j = 1; j <=N; j++){ 14 a[i][j]=rand()%2; 15 printf("%d ",a[i][j]); 16 } 17 printf("\n"); 18 } 19 printf("Flowing Matrix:\n"); 20 for(i = 1; i <= N; i++){ 21 for(j = 1; j <=N; j++){ 22 if(a[i][j]==1){ 23 r[i][j]=rand()%100;}else{ 24 r[i][j]=0; 25 } 26 printf("%3d",r[i][j]); 27 } 28 printf("\n"); 29 } 30} 31 32int hantei(int s,int t,int N){ 33 int current, count; 34 current=s; count=1, min=N+1; 35 for(k=1;k<=N;k++){ 36 v[k]=nonvisit; 37 a[k][k]=0; 38 r[k][k]=0; 39 d[k]=0; 40 } 41 v[s]=visit; d[count]=current; 42 j=current; 43 while(current!=t){ 44 if(v[t]==visit) break; 45 if((a[current][j]==1)&&(v[j]==nonvisit)){ 46 count++; 47 d[count]=j; 48 //printf("d[%d]:%d\n",count,j); 49 v[j]=visit; 50 if(r[current][j]<min) min=r[current][j]; 51 current=j; 52 j=s+1; 53 } 54 j++; 55 } 56 for(count=1;count<N;count++){ 57 r[d[count]][d[count+1]] = r[d[count]][d[count+1]]-min; 58 if(r[d[count]][d[count+1]]==0) a[d[count]][d[count+1]]=stop; 59 printf("r[%d][%d]:%d\n",count,count+1,r[d[count]][d[count+1]]); 60 } 61 for(k=2;k<=N;k++){ 62 if(r[s][k]>0) hantei(s,t,N); 63 } 64 printf("探索終了\n"); 65 for(k=2;k<=N;k++){ 66 sum+=r[s][k]; 67 } 68 printf("最大流量は%f\n",sum); 69 exit(0); 70} 71 72int main(void){ 73 int sum2; 74 int N=10; 75 srand((unsigned int)time(NULL)); 76 //for(int N=0;N<M;N++){ 77 start_clock=0,end_clock=0; 78 printf("%d回目\n",N+1); 79 ransuu(N); 80 start_clock=clock(); 81 hantei(1,N,N); 82 end_clock=clock(); 83 b[N]=(double)(end_clock-start_clock)/CLOCKS_PER_SEC; 84 sum2+=b[N]; 85 //} 86 printf("平均時間計算量:%f\n",sum2/M); 87 return 0; 88}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。