int main(int argc, char *argv[]) { //If there are not at least 3 arguments, then quit //ARG1: Binpack ARG2: binSize ARG3: First items if (argc < 3) { exit(0); } //Variables int binSize; int numItems; int items[MAX_SIZE]; int sorted[MAX_SIZE]; int solutions[5]; //Initialize variables for (int a = 0; a < MAX_SIZE; a++) { items[a] = 0; } for (int a = 0; a < 5; a++) { solutions[a] = -1; } int Flags[argc-2]; for (int a = 0; a < argc-2; a++) { Flags[a] = 0; } //Read in the bin size binSize = atoi(argv[1]); if (binSize <= 0) { exit(0); } //Flag options char *FlagOp[5] = {"-opt", "-ff", "-bf", "-ffd", "-bfd"}; int i; numItems = 0; //Read in the items for (i = 2; i < argc; i++) { //If the arg is a flag, leave loop if (strcmp(argv[i], FlagOp[0]) == 0 || strcmp(argv[i], FlagOp[1]) == 0 || strcmp(argv[i], FlagOp[2]) == 0 || strcmp(argv[i], FlagOp[3]) == 0 || strcmp(argv[i], FlagOp[4]) == 0) { //If no items, then quit if (i == 2) { exit(0); } break; } //If an item is not a positive integer //Or is larger than binSize //Or if there are more than MAX_SIZE items, quit else if (atoi(argv[i]) <= 0 || atoi(argv[i]) > binSize || numItems == MAX_SIZE) { exit(0); } else { items[i-2] = atoi(argv[i]); numItems++; } } //Read in the Flags for (int f = 0; i < argc; f++) { if (strcmp(argv[i], FlagOp[0]) == 0) Flags[f] = 1; else if (strcmp(argv[i], FlagOp[1]) == 0) Flags[f] = 2; else if (strcmp(argv[i], FlagOp[2]) == 0) Flags[f] = 3; else if (strcmp(argv[i], FlagOp[3]) == 0) Flags[f] = 4; else if (strcmp(argv[i], FlagOp[4]) == 0) Flags[f] = 5; else { exit(0); } i++; } //Make a copy of items and sort for (int a = 0; a < MAX_SIZE; a++) { sorted[a] = items[a]; } sortDecreasing(sorted); //Binpacking loop for (int b = 0; Flags[b] != 0; b++) { //Initialize Empty bins int bins[numItems]; for (int a = 0; a < numItems; a++) { bins[a] = 0; } //Backtracking if (Flags[b] == 1) { if (solutions[0] == -1) { //Compute sum of item sizes int sumItems = 0; for (int p = 0; sorted[p] != 0 && p < MAX_SIZE; p++) { sumItems += sorted[p]; } //Heuristic B int lowerBound = lowBound(sumItems, binSize); //Heuristic C int minBins = MAX_SIZE; //Recursion minBins = backtrack(0, binSize, numItems, bins, sorted, lowerBound, minBins, 0, 0, 0); solutions[0] = minBins; } printf("-opt %d\n", solutions[0]); } //First Fit else if (Flags[b] == 2) { if (solutions[1] == -1) { solutions[1] = firstFit(binSize, numItems, bins, items); } printf("-ff %d\n", solutions[1]); } //Best Fit else if (Flags[b] == 3) { if (solutions[2] == -1) { solutions[2] = bestFit(binSize, numItems, bins, items); } printf("-bf %d\n", solutions[2]); } //First Fit Decreasing else if (Flags[b] == 4) { if (solutions[3] == -1) { solutions[3] = firstFit(binSize, numItems, bins, sorted); } printf("-ffd %d\n", solutions[3]); } //Best Fit Decreasing else if (Flags[b] == 5) { if (solutions[4] == -1) { solutions[4] = bestFit(binSize, numItems, bins, sorted); } printf("-bfd %d\n", solutions[4]); } } }
vector<int> searchRange(vector<int>& nums, int target) { return {lowBound(nums, target), upBound(nums, target)}; }