01背包问题回溯法c语言代码
时间: 2023-07-30 22:12:56 浏览: 76
以下是 01 背包问题的回溯法 C 语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
int n, W;
int w[MAX_N], v[MAX_N];
int max_value = 0, cur_value = 0;
void backtrack(int i) {
if (i == n) {
if (cur_value > max_value) {
max_value = cur_value;
}
return;
}
if (W >= w[i]) {
cur_value += v[i];
W -= w[i];
backtrack(i + 1);
cur_value -= v[i];
W += w[i];
}
backtrack(i + 1);
}
int main() {
int i;
printf("Enter the number of items: ");
scanf("%d", &n);
printf("Enter the weight and value of each item:\n");
for (i = 0; i < n; i++) {
scanf("%d %d", &w[i], &v[i]);
}
printf("Enter the maximum weight of the knapsack: ");
scanf("%d", &W);
backtrack(0);
printf("Maximum value: %d\n", max_value);
return 0;
}
```
在此代码中,`w` 和 `v` 数组分别用于存储每个物品的重量和价值。`backtrack` 函数使用回溯法来递归地尝试选择或不选择每个物品,直到所有物品都尝试过,或者达到背包的最大重量。`cur_value` 和 `max_value` 变量分别用于记录当前背包中物品的总价值和最大价值。
阅读全文