C语言实现背包问题:深度优先搜索算法详解
这段代码是一个背包问题的求解程序,使用深度优先搜索算法。
首先,程序会要求用户输入物品数量、每个物品的重量和价值,以及背包的容量。然后,程序会对每个物品进行遍历,将它们的重量和价值记录在 w 和 v 数组中。接着,程序会要求用户输入背包的容量,并将最大价值 maxV 初始化为 0。
接下来,程序调用了一个名为 dfs 的函数,该函数会对每个物品进行深度优先搜索。具体来说,dfs 函数的第一个参数表示当前搜索到的物品序号,第二个参数表示当前已经装入背包的总重量,第三个参数表示当前已经装入背包的总价值。在函数内部,首先会判断当前搜索到的物品是否已经全部遍历过,如果是,则将当前的总价值与最大价值进行比较,如果当前总价值大于最大价值,则更新最大价值。如果当前物品没有全部遍历过,则分两种情况进行搜索:一种情况是不将当前物品放入背包中,即直接跳过该物品,继续搜索下一个物品;另一种情况是将当前物品放入背包中,此时需要判断当前背包的总重量是否超过了背包的容量限制,如果没有超过,则可以将当前物品放入背包中;如果超过了,则不能将当前物品放入背包中,直接跳过该物品,继续搜索下一个物品。
最后,程序输出最大价值,并结束运行。
以下是代码示例:
int main() {
printf('Please input the number of items: ');
scanf('%d', &n);
printf('Please input the weight and value of each item:
');
int i;
for (i = 0; i < n; ++i) {
scanf('%d %d', &w[i], &v[i]);
}
printf('Please input the capacity of the knapsack: ');
scanf('%d', &W);
maxV = 0;
dfs(0, 0, 0);
printf('The maximum value is: %d\n', maxV);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/oBLn 著作权归作者所有。请勿转载和采集!