public class Broadcast {
//算法复杂度 n~n**2
//暴力算法复杂度 2**n
public static void main(String[] args) {
Map<String, Set<String>> broadcasts = new LinkedHashMap<>();
Set<String> set1 = new HashSet<>();
set1.add("北京");
set1.add("上海");
set1.add("天津");
Set<String> set2 = new HashSet<>();
set2.add("北京");
set2.add("上海");
set2.add("深圳");
Set<String> set3 = new HashSet<>();
set3.add("成都");
set3.add("杭州");
set3.add("深圳");
Set<String> set4 = new HashSet<>();
set4.add("上海");
set4.add("广州");
set4.add("天津");
Set<String> set5 = new HashSet<>();
set5.add("杭州");
set5.add("大连");
broadcasts.put("K1", set1);
broadcasts.put("K2", set2);
broadcasts.put("K3", set3);
broadcasts.put("K4", set4);
broadcasts.put("K5", set5);
Set<String> allAreas = new HashSet<>();
allAreas.add("北京");
allAreas.add("上海");
allAreas.add("天津");
allAreas.add("广州");
allAreas.add("深圳");
allAreas.add("成都");
allAreas.add("杭州");
allAreas.add("大连");
List<String> result = new ArrayList<>();
Set<String> tempMaxArea = new HashSet<>();
//key覆盖最多的区域
String maxKey = null;
while (allAreas.size() != 0) {
maxKey = null;
//遍历电台
for (String key : broadcasts.keySet()) {
tempMaxArea.clear();
//地区 k1 电台覆盖的地区
Set<String> areas = broadcasts.get(key);
//去掉没有在allAreas里的城市 取交集
areas.retainAll(allAreas);
tempMaxArea.addAll(areas);
//找出目前电台最大广播范围
if (tempMaxArea.size() > 0 && (maxKey == null || tempMaxArea.size() > broadcasts.get(maxKey).size()))
maxKey = key;
}
//如果maxKey存在,则去除城市,即广播已覆盖
if (maxKey != null) {
result.add(maxKey);
allAreas.removeAll(broadcasts.get(maxKey));
broadcasts.remove(maxKey);
}
}
System.out.println("得到的选择结果是" + result);
}
}
电台覆盖问题的代码(贪心算法)
最新推荐文章于 2022-07-22 12:50:30 发布