贪心算法-广播覆盖问题
2022/6/6 1:20:19
本文主要是介绍贪心算法-广播覆盖问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.背景
2.代码
package com.ldp.algorithm.demo03Greedy; import org.junit.Test; import java.util.*; /** * @create 06/03 9:10 * @description <p> * 贪心算法 * 需求: * 广播台 覆盖地区 * K1 北京,上海,天津 * K2 广州,北京,深圳 * K3 成都,上海,杭州 * K4 上海,天津 * K5 杭州,大连 * </p> */ public class Test01 { @Test public void test01() { // 广播站kMap Map<String, HashSet<String>> kMap = new HashMap<>(); // 需要覆盖的城市 HashSet<String> listCity = new HashSet<>(); // 已选择的广播站 // Map<String, HashSet<String>> kMapSelect = new HashMap<>(); List<String> kMapSelect = new ArrayList<>(); // 初始化数据 init(kMap, listCity); System.out.println(listCity); // 存放某个电台覆盖地区与所有需要覆盖地区的交集 HashSet<String> tempK = new HashSet<>(); // 找出覆盖城市最多的广播站 int maxSize = 0; String maxNameK = ""; // 最大的交集 HashSet<String> maxRetainK = new HashSet<>(); while (listCity.size() > 0) { for (String item : kMap.keySet()) { // 清空临时变量 tempK.clear(); HashSet<String> itemK = kMap.get(item); // 加入当前电台需要覆盖度额地区 tempK.addAll(itemK); // 与需要覆盖地区的交集,存放于tempK中 tempK.retainAll(listCity); // 计算tmpK的覆盖地区个数 int size = tempK.size(); if (size > maxSize) { maxSize = size; maxNameK = item; maxRetainK.addAll(tempK); } } // 找到一个可以添加的电台 if (maxSize > 0) { kMapSelect.add(maxNameK); // 删除已添加的电台 kMap.remove(maxNameK); // 移除已经覆盖的电台地区 listCity.removeAll(maxRetainK); // 最大交集清零 maxRetainK.clear(); maxSize = 0; } else { System.out.println("没有找到可以添加的电台,地区没有覆盖完整"); break; } } System.out.println("已选择的电台:" + kMapSelect); } public void init(Map<String, HashSet<String>> kMap, HashSet<String> listCity) { HashSet<String> k1List = new HashSet<>(); k1List.add("北京"); k1List.add("上海"); k1List.add("天津"); kMap.put("K1", k1List); HashSet<String> k2List = new HashSet<>(); k2List.add("广州"); k2List.add("北京"); k2List.add("深圳"); kMap.put("K2", k2List); HashSet<String> k3List = new HashSet<>(); k3List.add("成都"); k3List.add("上海"); k3List.add("杭州"); kMap.put("K3", k3List); HashSet<String> k4List = new HashSet<>(); k4List.add("上海"); k4List.add("天津"); kMap.put("K4", k4List); HashSet<String> k5List = new HashSet<>(); k5List.add("杭州"); k5List.add("大连"); kMap.put("K5", k5List); for (String item : kMap.keySet()) { listCity.addAll(kMap.get(item)); } } }
完美!
这篇关于贪心算法-广播覆盖问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Java创意资料:新手入门的创意学习指南
- 2024-11-25JAVA对接阿里云智能语音服务资料详解:新手入门指南
- 2024-11-25Java对接阿里云智能语音服务资料详解
- 2024-11-25Java对接阿里云智能语音服务资料详解
- 2024-11-25JAVA副业资料:新手入门及初级提升指南
- 2024-11-25Java副业资料:入门到实践的全面指南
- 2024-11-25Springboot应用的多环境打包项目实战
- 2024-11-25SpringBoot应用的生产发布项目实战入门教程
- 2024-11-25Viite多环境配置项目实战:新手入门教程
- 2024-11-25Vite多环境配置项目实战入门教程