【背包】介绍

C++中的背包是一种常见的数据结构,用于存储和管理一组物品。背包通常是一个容器,可以添加、删除和查询物品。以下是一个简单的C++实现,包含大约100行代码的背包类的讲解。
 

#include <iostream>
#include <vector>
using namespace std;
// 物品类
class Item {
public:
    string name;
    int weight;
    int value;
    Item(string n, int w, int v) {
        name = n;
        weight = w;
        value = v;
    }
};
// 背包类
class Knapsack {
public:
    vector<Item> items;
    int capacity;
    Knapsack(int c) {
        capacity = c;
    }
    void addItem(Item item) {
        items.push_back(item);
    }
    void removeItem(string name) {
        for (int i = 0; i < items.size(); i++) {
            if (items[i].name == name) {
                items.erase(items.begin() + i);
                break;
            }
        }
    }
    int getTotalWeight() {
        int total = 0;
        for (int i = 0; i < items.size(); i++) {
            total += items[i].weight;
        }
        return total;
    }
    int getTotalValue() {
        int total = 0;
        for (int i = 0; i < items.size(); i++) {
            total += items[i].value;
        }
        return total;
    }
    void displayItems() {
        for (int i = 0; i < items.size(); i++) {
            cout << items[i].name << " - Weight: " << items[i].weight << ", Value: " << items[i].value << endl;
        }
    }
};
int main() {
    Knapsack knapsack(10);
    Item item1("Item 1", 2, 5);
    Item item2("Item 2", 3, 8);
    Item item3("Item 3", 5, 12);
    knapsack.addItem(item1);
    knapsack.addItem(item2);
    knapsack.addItem(item3);
    cout << "Total Weight: " << knapsack.getTotalWeight() << endl;
    cout << "Total Value: " << knapsack.getTotalValue() << endl;
    knapsack.removeItem("Item 2");
    cout << "After removing Item 2:" << endl;
    knapsack.displayItems();
    return 0;
}

在上面的代码中,首先定义了一个物品类 `Item`,包含了物品的名称、重量和价值。然后定义了背包类 `Knapsack`,包含了物品的集合以及背包的容量。

在背包类中,有添加物品的方法 `addItem()` 和删除物品的方法 `removeItem()`,使用 `vector` 来存储物品集合。还有计算背包总重量和总价值的方法 `getTotalWeight()` 和 `getTotalValue()`,以及展示背包中所有物品的方法 `displayItems()`。

在主函数中,创建了一个背包对象 `knapsack`,设置容量为10。创建了三个物品对象,并通过 `addItem()` 方法添加到背包中。然后输出背包的总重量和总价值,并通过 `removeItem()` 方法删除了一个物品后再次展示背包的物品。

这个简单的背包类实现了基本的背包操作,可以帮助我们理解C++中如何实现和使用背包数据结构。当然,实际的背包问题可能更加复杂,还可能涉及到算法来优化物品的选择和背包的装填。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值