/************************************/ /* ナップサック問題 napsakku.cxx */ /************************************/ #include #include #include #include using namespace std; #define BUFSIZE 256 //入力バッファの大きさ #define MAXP 256 //荷物の個数の最大値 #define SEED RAND_MAX-1 //乱数の種 #define R 10 //実験の繰り返し回数 //関数のプロトタイプ宣言 void initparcel(int parcel[][2]); //ファイルから荷物の重量とかちを読み込む void prints(int p[], int n) ; //解の表示 void solve(int parcel[][2], int p[], int weightlimit, long nlimit, int n) ; //解を求める void rsetp(int p[], int n); //乱数による荷物の詰め合わせ double frand(void) ; //実数乱数 int calcval(int parcel[][2], int p[], int n) ; //評価値の計算 int calcw(int parcel[][2], int p[], int n) ; //重量の計算 char fout[20]="napsakku.txt"; ofstream ofs(fout); /********************************/ /* main()関数 ******************/ /*********************************/ int main(int argc, char **argv) { int parcel[MAXP][2]={0}; //荷物 int p[MAXP]={0} ; //解 int weightlimit ; //制限重量 int n ; //荷物の個数 long nlimit ; //試行回数 int r ; //実験の繰り返し制御変数 if(argc!=4){ cout << "使い方 ./hello (荷物の個数) (制限重量)(試行回数の上限) \n"; exit(1); } n=atoi(argv[1]) ; if ((n<=0)||(n>MAXP)){//荷物の個数が不正 cout << "荷物の個数が不正です.\n"; exit(1) ; } ofs <<"荷物の個数:"<< n <<"\n"; if((weightlimit=atoi(argv[2]))<=0){//制限重量が0以下 cout << "制限重量が不正です。\n"; exit(1) ; } ofs << "制限重量:" << weightlimit <<"\n"; if((nlimit=atoi(argv[3]))<=0){//試行回数が0以下 cout <<"試行回数の上限が不正です。\n"; exit(1) ; } ofs << "試行回数の上限:" << nlimit <<"\n"; //ファイルから荷物の重量と価値を読み込む initparcel(parcel) ; //問題を解く srand(SEED) ; for(int a=0; a<=nlimit;a++){ //実験の繰り返し //for(r=0; rmaxvalue){//最良解を更新 maxvalue=value ; mweight=weight ; for(j=0; j> parcel[j][0]; cin >> parcel[j][1]; } }