【C++BFS算法】886. 可能的二分法
本文涉及的点
C++BFS算法
LeetCod886. 可能的二分法
给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。
给定整数 n 和数组 dislikes ,其中 dislikes[i] = [ai, bi] ,表示不允许将编号为 ai 和 bi的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true;否则返回 false。
示例 1:
输入:n = 4, dislikes = [[1,2],[1,3],[2,4]]
输出:true
解释:group1 [1,4], group2 [2,3]
示例 2:
输入:n = 3, dislikes = [[1,2],[1,3],[2,3]]
输出:false
示例 3:
输入:n = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]]
输出:false
提示:
1 <= n <= 2000
0 <= dislikes.length <= 104
dislikes[i].length == 2
1 <= dislikes[i][j] <= n
ai < bi
dislikes 中每一组都 不同
二分图
本题本质是最简单的二分图,如果有模板,可用染色法解决。
C++BFS
不失一般性,我们设1号在第0组。
BFS状态:leves[0]={1},leves[i]记录leves[i-1]的讨厌的人。空间复杂度:O(n)
BFS后续状态:枚举cur讨厌的人next,如果next已经有分组,且和cur的分组相同,返回false。否则,将next分配到和cur不同的分组。时间复杂度:O(m),m是边数。
BFS的初始状态:1在0分组。
BFS的返回值:枚举结束返回true。
BFS的出重处理:不需要。每个延误都要处理。
group[i] 为0,在第0组;为1,在第1组;-1,未分组。可能有多个连通区域,故没处理的节点都要BFS一次。
注意:是无向图,节点从1开始,可转化成从0开始。
以下想法是错误的:
将无向图,转成有向图,编号小的指向遍好大的。{1,3},{2,3}
代码
class Solution {public:bool possibleBipartition(int n, vector<vector<int>>& dislikes) {vector<vector<int>> vNeiBo(n);for (const auto& v : dislikes) {vNeiBo[v[0]-1].emplace_back(v[1] - 1);vNeiBo[v[1] - 1].emplace_back(v[0] - 1);}vector<int> group(n, -1);vector<int> vis(n);auto Add = [&](queue<int>& que, int cur) {if (vis[cur]) { return; }que.emplace(cur);vis[cur] = true;};auto BFS = [&](int root) {if (vis[root]) { return true; }queue<int> que;Add(que, root);group[root] = 0;while (que.size()) {const auto cur = que.front();que.pop();for (const auto& next : vNeiBo[cur]) {if (group[next] == group[cur]) {return false; }group[next] = (group[cur] + 1) % 2;Add(que, next);}}return true;};for (int i = 0; i < n; i++) {if (!BFS(i)) { return false; }}return true;}};
测试用例
int n;vector<vector<int>> dislikes;TEST_METHOD(TestMethod1){n = 4, dislikes = { {1,2},{1,3},{2,4} };auto res = Solution().possibleBipartition(n, dislikes);AssertEx(true, res);}TEST_METHOD(TestMethod2){n = 3, dislikes = { {1,2},{1,3},{2,3} };auto res = Solution().possibleBipartition(n, dislikes);AssertEx(false, res);}TEST_METHOD(TestMethod3){n = 5, dislikes = { {1,2},{2,3},{3,4},{4,5},{1,5} };auto res = Solution().possibleBipartition(n, dislikes);AssertEx(false, res);}TEST_METHOD(TestMethod4){n = 2, dislikes = { {1,2} };auto res = Solution().possibleBipartition(n, dislikes);AssertEx(true, res);}TEST_METHOD(TestMethod5){//无向图n = 2, dislikes = { {2,1} };auto res = Solution().possibleBipartition(n, dislikes);AssertEx(true, res);}TEST_METHOD(TestMethod13){n = 50, dislikes = { {39,46},{4,41},{3,35},{8,44},{22,44},{7,49},{28,41},{7,25},{6,35},{2,22},{34,35},{3,7},{1,11},{11,48},{8,24},{6,7},{38,40},{37,48},{3,45},{44,45},{4,46},{23,35},{28,46},{7,28},{35,36},{18,20},{8,15},{17,41},{13,35},{6,22},{22,48},{22,39},{4,35},{8,38},{23,41},{10,41},{6,41},{18,48},{16,41},{37,44},{8,12},{18,36},{16,18},{7,44},{3,18},{10,46},{20,37},{2,37},{11,49},{30,45},{28,37},{23,37},{22,23},{5,37},{29,40},{16,35},{22,26},{46,49},{18,26},{8,9},{24,46},{8,28},{11,29},{22,24},{7,15},{4,37},{9,40},{8,32},{23,40},{40,42},{33,40},{17,45},{40,48},{12,41},{43,45},{38,41},{45,47},{12,18},{7,31},{34,37},{8,48},{4,11},{46,48},{2,7},{17,40},{12,46},{22,49},{46,50},{37,50},{22,36},{22,43},{41,44},{13,22},{11,16},{7,47},{14,37},{37,43},{13,37},{26,40},{19,41},{46,47},{16,22},{19,22},{22,33},{11,19},{35,44},{7,33},{41,49},{38,45},{25,35},{3,37},{15,22},{6,18},{11,30},{5,41},{8,33},{1,46},{31,46},{41,42},{18,28},{15,41},{35,49},{25,41},{20,45},{26,46},{8,43},{5,45},{28,40},{1,18},{23,46},{13,18},{35,38},{8,49},{11,44},{18,33},{4,7},{5,7},{10,11},{37,49},{9,22},{4,45},{32,45},{32,37},{29,35},{26,35},{7,29},{1,37},{8,14},{5,11},{18,29},{18,49},{21,41},{17,35},{7,10},{22,38},{40,43},{5,35},{33,35},{6,40},{34,40},{22,34},{16,40},{19,46},{18,39},{24,35},{19,35},{18,50},{8,17},{11,12},{27,35},{8,47},{7,9},{7,36},{8,34},{7,26},{31,41},{29,41},{10,45},{9,35},{33,46},{11,32},{34,45},{42,46},{15,40},{40,50},{30,40},{25,40},{15,37} };auto res = Solution().possibleBipartition(n, dislikes);AssertEx(true, res);}

如果有不明白的,请加文末QQ群。如果要打包下载源码(CSDN下载频道偶尔审核不通过,原因未知),也请加QQ群。
扩展阅读
视频课程
先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等
课程
https://edu.csdn.net/lecturer/6176
相关推荐
| 我想对大家说的话 |
|---|
| 工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。 |
| 学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例。重视操作 |
| 有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注 |
| 闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。 |
| 子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。 |
| 如果程序是一条龙,那算法就是他的是睛 |
| 失败+反思=成功 |
测试环境
操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

相关文章:
【C++BFS算法】886. 可能的二分法
本文涉及的点 CBFS算法 LeetCod886. 可能的二分法 给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。 给定整数 n 和数组 dislikes ,其…...
【MySQL】记录MySQL加载数据(LOAD DATA)
MySQL LOAD DATA 一、背景二、模拟生成用户信息三、加载到mysql表3.1、建表语句3.2 加载数据3.3、查看结果 一、背景 现在有个需求是将用户信息存入student.data文件中,在现在load到数据库中 二、模拟生成用户信息 假设用户信息,包含姓名,…...
6 网络
6 网络 1、概念2 IP地址3、套接字4、TCP协议4.1 TCP协议的基本特征4.2 建立连接4.4 终止连接4.5 编程模型 5、UDP协议5.1 UDP协议的基本特性5.2 常用函数5.3 UDP通信模型 6、域名解析 1、概念 计算机网络是实现资源共享和信息传递的计算机系统 ISO/OSI网络协议模型 TCP/IP协…...
SQL中CASE WHEN的用法
CASE WHEN的用法 1. CASE WHEN数据转换 说明:使用CASE WHEN我们可以将范围的数据转换成特定的值来表达; 假如:有一个员工表Employee(employee_id,department_id.salary,name,age); 需求:需要根据薪资情况来评定等级:…...
CTF-Web习题:[GXYCTF2019]Ping Ping Ping
题目链接:[GXYCTF2019]Ping Ping Ping 解题思路 访问靶机,得到如下页面,类似于URL参数 尝试用HackBar构造url传输过去看看 发现返回了ping命令的执行结果,可以猜测php脚本命令是ping -c 4 $ip,暂时不知道执行的函数…...
python+vue3+onlyoffice在线文档系统实战20240725笔记,首页开发
解决遗留问题 内容区域的高度没有生效,会随着菜单的高度自动变化。 解决方案:给侧边加上一个最小高度。 首页设计 另一种设计: 进来以后,是所有的文件夹和最近的文件。 有一张表格,类似于Windows目录详情&…...
映美精彩色相机IFrameQueueBuffer转halcon的HObject
1.之前写了黑白IFrameQueueBuffer转halcon的HObject,下载这边文件写,彩色IFrameQueueBuffer转halcon的HObject 2.相机的部署跟黑白的一样,不同的是取图的格式改变 if (CamerTakeImageOne._camer_take_image_static._camer_is_exit){textbox_m…...
写代码对人的影响
1 代码是需要跑起来的,不能你写了一段代码运行不了 2 代码过程中有大量的bug,经常异常报错,你需要花费时间去解决 对人的影响就是解决问题的态度得到强化,解决问题要比坚持正确困难,坚持正确只是需要自然而然的努力&…...
Hive-基础介绍
简介 Apache Hive是一款数据仓库系统 功能 可以将存储在Hadoop(HDFS)中的数据映射为一张数据库表。核心是将HQL语句转化为MapRece程序,然后提交到Hadoop执行。 组件 用户接口:CLI(shell命令行)、WebGUI、Thrift Server元数据存储(Metastore)&#x…...
网站如何从0-1搭建部署蓝图介绍
第一步:网站规划 确定网站目的:明确网站的目标和预期的受众。内容规划:决定网站将包含哪些内容和功能。技术需求分析:确定所需的技术栈,例如前端和后端技术。 第二步:设计 草图和布局:绘制网…...
面向对象(封装)练习题 巩固一下啦!
# 设计一个类,用来描述手机 class Phone:# 提供私有成员变量:__is_5g_enable__is_5g_enable False # 5g状态# 提供私有成员方法:__check_5gdef __check_5g(self):if self.__is_5g_enable:print("5g开启")else:print("5g关闭…...
一些问题 7/28
get post可以public吗 在Java Servlet中,doGet()和doPost()方法的访问修饰符通常是public,因为这些方法需要被Servlet容器(如Tomcat)调用。 如果将这些方法声明为private或protected,Servlet容器将无法访问它们&…...
昇思MindSpore 应用学习-基于MobileNetv2的垃圾分类
基于MobileNetv2的垃圾分类 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入,对图像中的垃圾物体进行检测,并将检测结果图片保存到文件中。 1、实验目的 了解熟悉垃圾分类应用代码的编写(Python语言)&…...
matlab 常用数据类型的转换
目录 一、数据类型1、整型2、浮点型3、逻辑型4、元胞数组5、结构体 二、数据类型转换三、图像数据类型转换四、参考链接 一、数据类型 1、整型 int和unit都是整型,只是前一个有符号,后一个没有符号,比如在16位系统中,int范围是-3…...
Cocos Creator2D游戏开发(6)-飞机大战(4)-敌机产生
敌机产生&玩家发射子弹 敌机产生: 创建一个空节点 创建一个敌机预制体 把敌机图片拖入预制体内 使用代码生成敌机 让敌机动起来 创建一个预制体enemy_prefab双击预制体enemy_prefab,然后拖入一个敌机图片,设置好方向和尺寸,一定要记得保存然后关闭(场景编辑器里面的保存)…...
Hugo部署到Vercel踩大坑——全是XML文件?
问题描述 部署到Vercel全都是XML文件 Vercel是著名PAAS服务,相比于 Github Pages,其中国大陆可直接访问,因此尝试把Hugo站点发布到vercel中,部署后遇到问题,所有页面都为xml文件,如下所示: Ve…...
2024 暑假友谊赛-热身1
[ABC102D] Equal Cut - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路:找在区间[2,n-1]中找到i,j,k三个点,把序列分割成4个区间:[1,i],[i1,j],[j1,k],[k1,n] 暴力的做法是枚举i,j,k加上前缀和是o(n^3)的 key:"考虑枚举处于中间的j,然后用i平衡左两个区间,…...
Nginx系列-11 HTTP消息处理流程
背景 了解Nginx处理HTTP请求的11个阶段,有助于理解和配置nginx、自定义模块、基于lua模块自定义功能。按如下配置,执行"curl http://localhost:8001/query/test.html",如果读者对结果不是很确定,建议阅读本文。 serve…...
前端知识--前端访问后端技术Ajax及框架Axios
一、异步数据请求技术----Ajax Ajax是前端访问后端的技术,为异步请求(不刷新页面,请求数据,只更新局部数据)。 例如:在京东网站中搜索电脑,就会出现一些联想搜索,但此时页面并没有…...
【前端/js】使用js读取本地文件(xml、二进制)内容
目录 说在前面FileReaderDOMParser文本文件二进制文件 说在前面 浏览器版本:Microsoft Edge 126.0.2 (正式版本) (64 位) FileReader MDNFileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容&#x…...
Linux服务器日志爆满?5个实用命令快速定位并清理大日志文件
Linux服务器日志爆满?5个实用命令快速定位并清理大日志文件 当服务器磁盘空间告急时,日志文件往往是罪魁祸首。作为系统管理员,我们需要快速定位问题并安全清理,避免服务中断。本文将分享5个核心命令的组合使用技巧,帮…...
Java 26 FFM API进阶:零JNI调用TensorRT/OpenVINO,AI端到端延迟砍半
文章目录一、JNI,AI时代的"文言文写作"二、FFM API:Java调用原生代码的"现代白话文"1. Arena:比try-with-resources还狠的内存管理2. Linker:C函数的"Java身份证"3. jextract:头文件自动…...
Kook Zimage 真实幻想 Typora文档集成方案
Kook Zimage 真实幻想 Typora文档集成方案 1. 引言 技术文档写作最头疼的是什么?文字描述得再生动,也不如一张直观的图片来得有说服力。传统的文档创作流程中,我们需要先在专门的AI绘图工具中生成图片,然后下载保存,…...
STM32CubeIDE工程复制粘贴保姆级教程:告别重复配置,5分钟搞定新项目
STM32CubeIDE工程复制粘贴保姆级教程:告别重复配置,5分钟搞定新项目 每次启动新项目时,你是否还在重复那些繁琐的初始化步骤?从零开始配置时钟树、外设参数、中断优先级,不仅耗时费力,还容易出错。对于经验…...
突发!国行苹果 AI 凌晨偷跑又紧急下线
3 月 31 日凌晨,大量升级 iOS 26.4 的国行 iPhone 16 及后续机型用户,突然发现设置里 “Siri” 变成 “Apple 智能与 Siri”,可下载 9.5GB 本地 AI 模型,解锁实时翻译、视觉智能、照片消除等全套功能。不过这场“惊喜”仅持续了数…...
错位排序算法
首先,让我们理解什么是错位排列:错位排列是指在排列中,任何一个元素都不在自己原来的位置上。比如,对于序列 {1,2,3}{1,2,3},一个错位排列可能是 {3,1,2}{3,1,2},因为 11 不在位置 11 上,22 不在…...
基于博途1200PLC+HMI的六层三部电梯控制系统仿真程序
基于博途1200PLCHMI六层三部电梯控制系统仿真 程序: 1、任务:PLC.人机界面控制三部电梯集群运行 2、系统说明: 系统设有上呼、下呼、内呼、手动开关门、光幕、检修、故障、满载、等模拟模式控制, 系统共享厅外召唤信号,…...
保姆级教程:在Ubuntu 22.04上从Anaconda到PyTorch,一步步搞定GPU环境(含CUDA 11.7避坑指南)
保姆级教程:在Ubuntu 22.04上从Anaconda到PyTorch,一步步搞定GPU环境(含CUDA 11.7避坑指南) 刚接触深度学习的开发者们,最头疼的往往不是模型设计本身,而是环境搭建这个"拦路虎"。本文将手把手带…...
FunASR Docker部署SSL配置的四个‘天坑’与避坑指南(附完整启动命令)
FunASR Docker部署SSL配置的四个‘天坑’与避坑指南(附完整启动命令) 在语音识别服务的安全部署中,SSL/TLS加密已成为行业标配。但当我们实际为FunASR配置HTTPS时,那些看似简单的步骤背后却暗藏玄机。本文将带您穿越四个最具迷惑性…...
MySQL解析器的性能优化:从理论到实践
MySQL解析器的性能优化:从理论到实践 引言 作为一名在数据深渊里捞了十几年 Bug 的女码农,我见过太多因为解析器性能问题导致的数据库瓶颈。在 MySQL 数据库中,解析器的性能直接影响 SQL 语句的处理速度和系统的整体性能。今天,我…...
