package com;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
public class Mytest2 {
public static void main(String[] args) {
//这个greedAlgorithm就是有一个表格
//里面有 key value 就跟站台 跟其广播的地区,然后求要完整覆盖这些地区的key站台的集合
//所有覆盖广播站台与覆盖的地区
Map<String, HashSet<String>> coverList = new HashMap<>();
//下面的全部创建各个站所覆盖的地方
HashSet<String> area1 = new HashSet<>();
area1.add("北京");
area1.add("上海");
area1.add("天津");
HashSet<String> area2 = new HashSet<>();
area2.add("广州");
area2.add("北京");
area2.add("深圳");
HashSet<String> area3 = new HashSet<>();
area3.add("成都");
area3.add("上海");
area3.add("杭州");
HashSet<String> area4 = new HashSet<>();
area4.add("上海");
area4.add("天津");
HashSet<String> area5 = new HashSet<>();
area5.add("杭州");
area5.add("大连");
//将所有的站放入Map集合中
coverList.put("k1", area1);
coverList.put("k2", area2);
coverList.put("k3", area3);
coverList.put("k4", area4);
coverList.put("k5", area5);
//创建一个集合,包含所有的地区
HashSet<String> allArea = new HashSet<>();
allArea.add("北京");
allArea.add("上海");
allArea.add("广州");
allArea.add("天津");
allArea.add("深圳");
allArea.add("成都");
allArea.add("杭州");
allArea.add("大连");
//第一个是选择的站台,第二个是选择的k站台,第三个是站台所广播的范围与全部的并集的大小
//temp就是来存放站台所广播的范围与全部的并集
ArrayList<String> selects = new ArrayList<>();
String maxKey = null;
int maxSize = 0;
HashSet<String> temp = new HashSet<>();
while (allArea.size() != 0) {
//重置
maxKey = null;
maxSize=0;
//循环,找并集,然后比较并集的大小,然后放入maxKey、maxSize
for (String key : coverList.keySet()) {
//这里的临时的集合temp一定要清空不然就会一直叠加,会导致最后的结果的出错
temp.clear();
HashSet<String> areas = coverList.get(key);
temp.addAll(areas);
temp.retainAll(allArea);
if (temp.size() > 0 && (maxKey == null || temp.size() > maxSize)) {
maxKey = key;
maxSize = temp.size();
}
}
//判断maxKey是否为null,这个可能是并集为0
if (maxKey != null) {
selects.add(maxKey);
allArea.removeAll(coverList.get(maxKey));
}
}
//输出结果
System.out.println(selects.toString());
}
}
贪心算法
最新推荐文章于 2024-08-24 22:01:16 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)