c语言贪心算法背包文题代码
时间: 2024-04-14 08:23:46 浏览: 104
当涉及到背包问题时,贪心算法是一种常用的解决方法。在C语言中,可以使用贪心算法来解决背包问题。下面是一个简单的C语言贪心算法背包问题的代码示例:
```c
#include <stdio.h>
// 定义物品结构体
typedef struct {
int weight; // 物品重量
int value; // 物品价值
} Item;
// 贪心算法背包问题函数
void knapsack(Item items[], int n, int capacity) {
// 计算物品的性价比(价值除以重量)
float ratios[n];
for (int i = 0; i < n; i++) {
ratios[i] = (float) items[i].value / items[i].weight;
}
// 按照性价比排序物品
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (ratios[j] < ratios[j + 1]) {
// 交换物品的位置
float tempRatio = ratios[j];
ratios[j] = ratios[j + 1];
ratios[j + 1] = tempRatio;
Item tempItem = items[j];
items[j] = items[j + 1];
items[j + 1] = tempItem;
}
}
}
// 装入背包
int currentWeight = 0;
float totalValue = 0;
for (int i = 0; i < n; i++) {
if (currentWeight + items[i].weight <= capacity) {
// 将物品放入背包
currentWeight += items[i].weight;
totalValue += items[i].value;
} else {
// 物品只能部分放入背包
int remainingWeight = capacity - currentWeight;
totalValue += ratios[i] * remainingWeight;
break;
}
}
// 输出结果
printf("背包中物品的总价值为: %.2f\n", totalValue);
}
int main() {
// 创建物品数组
Item items[] = {
{10, 60},
{20, 100},
{30, 120}
};
int n = sizeof(items) / sizeof(items[0]); // 物品数量
int capacity = 50; // 背包容量
// 调用贪心算法背包问题函数
knapsack(items, n, capacity);
return ;
}
```
这段代码实现了一个简单的贪算法背包问题。它首先计算每个物品性价比,然后按照性价比对物品进行排序。接下来,它从性价比最高的物品开始,依次将物品放入背包,直到背包装满或者所有物品都放入背包。最后,输出背包中物品的总价值。
阅读全文