0-1背包问题使用回溯法使用c语言
时间: 2023-12-02 09:06:14 浏览: 111
用回溯法解0-1背包问题
以下是使用回溯法解决0-1背包问题的C语言代码:
```
#include <stdio.h>
int weight[100], value[100], n, max_weight, max_value;
int curr_weight, curr_value;
void backtrack(int i) {
if (i == n) {
if (curr_weight <= max_weight && curr_value > max_value) {
max_value = curr_value;
}
return;
}
curr_weight += weight[i];
curr_value += value[i];
if (curr_weight <= max_weight) {
backtrack(i + 1);
}
curr_weight -= weight[i];
curr_value -= value[i];
backtrack(i + 1);
}
int main() {
printf("请输入物品数量: ");
scanf("%d", &n);
printf("请输入背包容量: ");
scanf("%d", &max_weight);
printf("请依次输入每个物品的重量和价值: \n");
for (int i = 0; i < n; i++) {
scanf("%d %d", &weight[i], &value[i]);
}
backtrack(0);
printf("最大价值为: %d\n", max_value);
return 0;
}
```
运行程序后,用户需要输入物品数量、背包容量和每个物品的重量和价值。然后程序使用回溯法计算出最大价值,并输出结果。
阅读全文