蓝桥每日打卡--分考场

#蓝桥#JAVA#分考场

题目描述

n个人参加某项特殊考试。

为了公平,要求任何两个认识的人不能分在同一个考场。

求是少需要分几个考场才能满足条件。

输入描述

输入格式:

第一行,一个整数n(1≤n≤100),表示参加考试的人数。

第二行,一个整数m,表示接下来有m行数据。

以下m行每行的格式为:两个整数a,b,用空格分开 (1≤a,b≤n)表示第a个人与第b个人认识。

输出描述

输出一行一个整数,表示最少分几个考场。

问题分析

本题的核心问题是在给定一定数量的学生以及学生之间的认识关系的情况下,找出使用最少考场来安排所有学生的方案,并且要保证每个考场内的学生彼此都不认识。由于需要探索所有可能的考场安排组合,从中找出最优解,所以可以采用深度优先搜索(DFS)算法来解决。

1. 穷举所有可能的方案

在这个问题中,每个学生都有多种选择,可以被安排到已有的某个考场,或者新开一个考场。因为学生数量和考场安排的可能性众多,要找出使用最少考场的方案,就需要遍历所有可能的安排方式。DFS 算法的特点是能够按照一定的顺序,递归地深入搜索每一种可能的路径,从而实现对所有可能方案的穷举。 例如,对于第一个学生,它可以被安排到第一个考场;对于第二个学生,它可以选择和第一个学生在同一个考场(前提是他们不认识),也可以新开一个考场。通过 DFS,我们可以依次尝试所有这些可能性,确保不会遗漏任何一种安排方案。

2. 回溯机制

便于尝试不同选择 DFS 算法具有回溯机制,这在本题中非常有用。当我们将一个学生安排到某个考场后,继续递归安排后续学生。如果后续发现这种安排方式无法满足所有学生的安排或者不是最优方案,我们可以通过回溯操作撤销之前的安排,尝试其他的安排方式。 在代码中,当我们将学生 `x` 安排到 `nums[i][j]` 座位后,递归调用 `dfs` 方法安排下一个学生。如果后续的递归过程中发现这种安排不行,返回后会将 `nums[i][j]` 置为 0,即撤销该安排,然后尝试将学生 `x` 安排到其他考场或座位。

3. 剪枝优化提高效率

在搜索过程中,我们可以利用剪枝策略来减少不必要的搜索。在本题中,如果当前使用的考场数量已经大于等于之前记录的最少考场数量,那么继续搜索下去不可能得到更优的方案,此时可以直接返回,避免继续深入搜索,从而提高算法的效率。 例如,在 `dfs` 方法中,当 `k >= sum` 时,就直接返回,不再进行后续的搜索。

4. 递归实现

简单直观 DFS 算法通常使用递归的方式实现,代码结构清晰,逻辑简单直观。在本题中,通过递归调用 `dfs` 方法,不断地安排下一个学生,同时更新考场数量,使得代码的实现和问题的解决思路高度一致,易于理解和维护。 综上所述,由于本题需要穷举所有可能的考场安排方案,并且需要回溯机制来尝试不同的选择,同时可以利用剪枝优化提高效率,因此使用 DFS 算法是一个合适的选择。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class Main {static int sum = 110;// 最多可以安排的教室static int nums[][] = new int [100][100]; //nums[i][k] 考场表 i 表示考场,k表示座位 static boolean visi[][] = new boolean [100][100];// 记录考场信息static int n; // 学生数量static int m; // 关系数据的数量static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));public static void main(String[] args) throws IOException{String [] sc = bf.readLine().split(" ");n = Integer.parseInt(sc[0]);sc = bf.readLine().split(" ");m = Integer.parseInt(sc[0]);for (int i = 0; i < m ; i++){sc = bf.readLine().split(" ");int x = Integer.parseInt(sc[0]);int y = Integer.parseInt(sc[1]);// 标记互相认识的人visi[x][y] = true;visi[y][x] = true;}dfs(1, 1);System.out.println(sum);}// x 代表第几个学生, k考场public static void dfs(int x,int k){// 剪枝 如果当前考场大于最小考场,就没必要继续则返回if(k >= sum) return;// 第x学生>全部学生,表明全部的学生都进入了考场,所有学生都有考场if(x > n){sum = Math.min(k, sum);//只需从当前考场值和当前最小值中取最小值return;}//为每一位学生分配考场for (int i = 1; i <= k; i++){int j = 0;//考场有人且无认识的人//i代表考场  j 代表座位号                while(nums[i][j] != 0 && !visi[x][nums[i][j]]){j++;}//考场为空if(nums[i][j] == 0){// x 进入nums[i][j]考场nums[i][j] = x;//下一位同学进行分配dfs(x + 1, k);//回溯  以便找到更好的方法nums[i][j] = 0;}}// 开辟完所有的考场发现都认识那就只可以再开一所考场了nums[k + 1][0] = x;dfs(x + 1, k + 1);//回溯nums[k + 1][0] = 0;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/72583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RMAN备份bug-审计日志暴涨(select action from gv$session)

问题概述 /oracle 文件系统使用率过大&#xff0c;经过检查是审计日志过大,/oracle 目录 197G 审计日志占用70G&#xff0c;每6个小时产生大量审计日志&#xff0c;日志内容全是select action from gv$session &#xff0c;猜测可能跟备份有关&#xff0c; $>df -h /oracle…

在Blender中给SP分纹理组

在Blender中怎么分SP的纹理组/纹理集 其实纹理组就是材质 把同一组的材质分给同一组的模型 导入到sp里面自然就是同一个纹理组 把模型导入SP之后 就自动分好了

Nuxt:Nuxt3框架中onBeforeMount函数 和onBeforeRouteUpdate函数区别介绍 【超详细!】

提示&#xff1a;在 Nuxt3 中&#xff0c;onBeforeMount 和 onBeforeRouteUpdate 是两个不同场景下使用的钩子函数&#xff0c;分别对应 Vue 组件生命周期 和 路由导航守卫。以下是它们的详细解释和对比&#xff1a; 文章目录 一、onBeforeMount&#xff08;Vue 生命周期钩子&a…

华为 Open Gauss 数据库在 Spring Boot 中使用 Flyway

db-migration&#xff1a;Flyway、Liquibase 扩展支持达梦&#xff08;DM&#xff09;、南大通用&#xff08;GBase 8s&#xff09;、OpenGauss 等国产数据库。部分数据库直接支持 Flowable 工作流。 开源代码仓库 Github&#xff1a;https://github.com/mengweijin/db-migrat…

java 查找两个集合的交集部分数据

利用了Java 8的Stream API&#xff0c;代码简洁且效率高 import java.util.stream.Collectors; import java.util.List; import java.util.HashSet; import java.util.Set;public class ListIntersection {public static List<Long> findIntersection(List<Long> …

双足机器狗开发:Rider - Pi

双足机器狗开发:Rider - Pi https://github.com/YahboomTechnology/Rider-Pi-Robot 项目介绍 Rider - Pi是一款为开发者、教育工作者和机器人爱好者设计的桌面双轮腿式机器人,它基于树莓派CM4核心模块构建,具备多种先进功能和特点: 硬件特性 核心模块:采用树莓派CM4核…

Android12 添加开机铃声

系统默认是没有播放开机铃声的功能&#xff0c;MTK有一套自己的开机铃声处理逻辑&#xff0c;代码在/vendor/mediatek/proprietary/operator/frameworks/bootanimation/MtkBootanimation下&#xff0c;但是在10之后MTK就不在维护这部分代码了。直接使用会有很多编译报错&#x…

3.6V-30V宽压输入降压同步IC内置MOS,电流4A/5A/6A,可以满足汽车应急电源,BMS电池,电池组USB口输出等储能应用

今天给大家介绍一下这三款产品&#xff0c;分别是CJ92340,输入电压4.5V-30V&#xff0c;输出可调&#xff0c;电流负载能力可达4A&#xff0c;频率350KHZ。CJ92350,输入电压3.6V-30V&#xff0c;输出可调&#xff0c;频率可调&#xff0c;带载能力达5A。CJ92360,输入电压3.6V-3…

代码随想录算法训练营第35天 | 01背包问题二维、01背包问题一维、416. 分割等和子集

一、01背包问题二维 二维数组&#xff0c;一维为物品&#xff0c;二维为背包重量 import java.util.Scanner;public class Main{public static void main(String[] args){Scanner scanner new Scanner(System.in);int n scanner.nextInt();int bag scanner.nextInt();int[…

010---基于Verilog HDL的分频器设计

文章目录 摘要一、时序图二、程序设计2.1 rtl2.2 tb 三、仿真分析四、实用性 摘要 文章为学习记录。绘制时序图&#xff0c;编码。通过修改分频值参数&#xff0c;实现一定范围分频值内的任意分频器设计。 一、时序图 二、程序设计 2.1 rtl module divider #(parameter D…

维度建模事实表技术基础解析(以电商场景为例)

维度建模事实表技术基础解析(以电商场景为例) 1. 事实表结构 定义:事实表是维度建模的核心,由外键(关联维度表)、度量值(可量化的业务指标)及退化维度(冗余的维度属性)组成。其本质是记录业务过程中的度量事件,例如电商订单金额、商品库存量等。 场景识别:适用于…

Redis 主从复制、哨兵与集群的关系及工作原理详解

一、核心概念与关系 Redis 的 主从复制、哨兵&#xff08;Sentinel&#xff09; 和 集群&#xff08;Cluster&#xff09; 是逐步演进的高可用与分布式解决方案&#xff0c;三者关系如下&#xff1a; 主从复制&#xff1a;数据冗余与读写分离的基础。 哨兵&#xff1a;在主从…

确认机制的分类及其区别与联系探讨

在传输控制中&#xff0c;确认机制&#xff08;ACK 机制&#xff09;作为反馈模块在实现拥塞控制、丢包恢复和状态监测等功能中起到了至关重要的作用。今天我将基于之前发表的论文研究成果&#xff0c;对确认机制的分类进行系统梳理&#xff0c;并讨论各类机制之间的区别与联系…

115 道 MySQL 面试题,从简单到深入!

1. 什么是数据库事务&#xff1f; 数据库事务是一个作为单个逻辑工作单元执行的一系列操作。事务具有ACID属性&#xff0c;即原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xf…

Linux - 网络套接字

一、网络编程 1&#xff09;地址结构 1. IP地址结构 struct in_addr&#xff1a;是用于表示 IPv4 地址 的结构体&#xff0c;定义在头文件 <netinet/in.h> 中。它的主要作用是存储一个 32 位的 IPv4 地址&#xff0c;通常与 struct sockaddr_in 一起使用。 struct in_a…

程序员学商务英语之Visiting the Factory

Dialogue-1 Arranging a Visit安排参观 I was wondering if you would / could lend me a million bucks, you know, I’m trying to start / run my own business. 我想知道你是否能够借给我一百万美金&#xff0c;你知道&#xff0c;我正在创业。 Take off your tie befor…

机器视觉运动控制一体机在天地盖同步跟随贴合解决方案

市场应用背景 纸盒天地盖是一种包装形式&#xff0c;广泛应用于消费电子、食品礼盒、奢侈品及化妆品等领域。其采用高强度纸板&#xff0c;经过预组装处理&#xff0c;结构坚固稳定&#xff0c;能有效保护产品并提升品牌形象。随着包装行业快速发展&#xff0c;市场对天地盖的…

【智能体Agent】ReAct智能体的实现思路和关键技术

基于ReAct&#xff08;Reasoning Acting&#xff09;框架的自主智能体 import re from typing import List, Tuplefrom langchain_community.chat_message_histories.in_memory import ChatMessageHistory from langchain_core.language_models.chat_models import BaseChatM…

Electron打包工具对比

在 Electron 生态中&#xff0c;打包工具的选择直接影响开发效率、配置复杂度和最终应用的性能。以下是主流的 Electron 打包工具及其优劣分析&#xff0c;结合你的 Vue 项目需求&#xff0c;我会在最后给出推荐方案&#xff1a; 一、主流 Electron 打包工具对比 1. Electron …

云原生系列之本地k8s环境搭建

前置条件 Windows 11 家庭中文版&#xff0c;版本号 23H2 云原生环境搭建 操作系统启用wsl(windows subsystem for linux) 开启wsl功能&#xff0c;如下图 安装并开启github加速器 FastGithub 2.1 下载地址&#xff1a;点击下载 2.2 解压安装文件fastgithub_win-x64.zip 2…