问题描述
假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。如何选择最少的广播台,让所有的地区都可以接收到信号。
| 广播台 | 覆盖地区 |
|---|---|
| K1 | 北京 上海 天津 |
| K2 | 广州 北京 深圳 |
| K3 | 成都 上海 杭州 |
| K4 | 上海 天津 |
| K5 | 杭州 大连 |
思路分析
- 遍历所有的广播电台,找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系);
- 将这个电台加入到一个集合中(比如Arraylist),想办法把该电台覆盖的地区在下次比较时去掉;
- 重复第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"] = {

最低0.47元/天 解锁文章

5481

被折叠的 条评论
为什么被折叠?



