【贪心算法】:集合覆盖问题

问题描述

假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号。

广播台 覆盖地区
K1 北京 上海 天津
K2 广州 北京 深圳
K3 成都 上海 杭州
K4 上海 天津
K5 杭州 大连

思路分析

  1. 遍历所有的广播电台,找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系);
  2. 将这个电台加入到一个集合中(比如Arraylist),想办法把该电台覆盖的地区在下次比较时去掉;
  3. 重复第1步直到覆盖了全部的地区。

算法图示

请添加图片描述

在这里插入图片描述

代码实现

#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <string>

using namespace std;

int main() {
   
    // 初始化所有广播台及其覆盖的地区
    unordered_map<string, unordered_set<string>> broadcasts;
    broadcasts["K1"] = {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值