Login
网站首页 > 文章中心 > 其它

贪心算法求解背包问题c语言

作者:小编 更新时间:2023-07-08 10:26:23 浏览量:199人看过

下面土嘎嘎小编分享一个使用贪心算法解决背包问题的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 函数来计算可获得的最大价值。

土嘎嘎技术网友情提示:贪心算法在解决背包问题时并不是一种通用的解决方法,只适用于某些特定情况下。对于一般的背包问题,需要使用动态规划等更复杂的算法来求解。


版权声明:倡导尊重与保护知识产权,本站有部分资源、图片来源于网络,如有侵权,请联系我们修改或者删除处理。
转载请说明来源于"土嘎嘎" 本文地址:http://www.tugaga.com/jishu/other/1069.html
<<上一篇 2023-07-08
下一篇 >> 2023-07-08

编辑推荐

热门文章