• 締切済み

ナップサック問題の選択におけるトーナメント方式について

ナップサック問題の選択におけるトーナメント方式について 20個から2個とりだし、優秀なほうを残す。 先ほど選んだ優秀なものをのぞいた19個から2個とりだし優秀なほうをのこす。 それを12回繰り返し12個の親を選びたいのですが 親のループがうまくいきません。 これはoya[0]とし1回だけ判別するプログラムをつくってみました。 改善点やループのつけたすところなど教えてください。 typedef struct{ int *gene; int total_value; int total_weight; }INDI,ITIJI,OYA; INDI *INDI_data; OYA *oya; ITIJI *itiji; for (i=0; i<20; i++) d[i] = 0; for (j=0; j<2;) { l = rand()%20; printf("l=%d\n",l); if(d[l]==0) { itiji[j++]=INDI_data[l]; d[l] = 1; } } if(itiji[0].total_value>itiji[1].total_value){ oya[0]=itiji[0]; } else if(itiji[1].total_value>itiji[0].total_value){ oya[0]=itiji[1]; } for (k=0; k<15; k++) { printf("%d",oya[0].gene[k]); } printf("\n"); printf("%d",oya[0].total_value);

みんなの回答

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

それから、せっかくコードを提示するのなら、 断片でなく全体を見せてください。 提示されていない部分を回答者が想像で補うことはできません。

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

> OYA *oya; > ITIJI *itiji; > > itiji[j++]=INDI_data[l]; > oya[0]=itiji[0]; ポインターと配列の違いが理解できていないようです。

関連するQ&A