下面土嘎嘎小编分享一个使用贪心算法解决背包问题的C语言示例代码:
〓〓c代码如下:〓〓
#include <stdio.h>
struct Item {
int weight;
int value;
};
int compare(const void* a, const void* b) {
struct Item* itemA = (struct Item*)a;
struct Item* itemB = (struct Item*)b;
double ratioA = (double)itemA->value / itemA->weight;
double ratioB = (double)itemB->value / itemB->weight;
if (ratioA > ratioB)
return -1;
else if (ratioA < ratioB)
return 1;
else
return 0;
}
double fractionalKnapsack(int capacity, struct Item items[], int numItems) {
qsort(items, numItems, sizeof(struct Item), compare);
double totalValue = 0.0;
for (int i = 0; i < numItems; i++) {
if (capacity <= 0)
break;
if (items[i].weight <= capacity) {
totalValue += items[i].value;
capacity -= items[i].weight;
} else {
double fraction = (double)capacity / items[i].weight;
totalValue += items[i].value * fraction;
capacity = 0;
}
}
return totalValue;
}
int main() {
int capacity = 50;
struct Item items[] = {{10, 60}, {20, 100}, {30, 120}};
int numItems = sizeof(items) / sizeof(items[0]);
double maxValue = fractionalKnapsack(capacity, items, numItems);
printf("Maximum value that can be obtained: %.2f\n", maxValue);
return 0;
}
上面给出的代码定义了一个 Item 结构体来表示每个物品的重量和价值。 compare 函数用于比较两个物品的价值与重量比例,以便进行贪心选择。 fractionalKnapsack 函数实现了贪心算法的逻辑,首先对物品进行排序,然后从价值与重量比例最高的物品开始选择,直到背包容量用尽或所有物品都被选中。在 main 函数中,定义了一个背包容量、一组物品,并调用 fractionalKnapsack 函数来计算可获得的最大价值。
土嘎嘎技术网友情提示:贪心算法在解决背包问题时并不是一种通用的解决方法,只适用于某些特定情况下。对于一般的背包问题,需要使用动态规划等更复杂的算法来求解。