当前位置: 首页 > news >正文

算法——图论:判断二分图(染色问题)

题目:. - 力扣(LeetCode)

方法一:并查集

class Solution {
public:vector<int>father;int find(int x){if (father[x] != x)father[x] = find(father[x]);return father[x];}void add(int x1, int x2){int fa1 = find(x1), fa2 = find(x2);if (fa1 != fa2)father[fa1] = fa2;}bool isBipartite(vector<vector<int>>& graph) {father.resize(graph.size());for (int i = 0; i < graph.size(); i++){father[i] = i;}for (int i = 0; i < graph.size(); i++){//if (graph[i].size() == 1 || graph[i].size() == 0)continue;for (int j = 0; j < graph[i].size() ; j++){if(find(i)==find(graph[i][j]))return false;add(graph[i][j], graph[i][0]);}}// int cnt = 0;// for (int i = 0; i < graph.size(); i++)// {//     if (find(i) == i )cnt++;// }// return cnt==2;return true;}
};

注释的代码为一开始使用的方法,在处理完每个节点之后,从头到尾遍历每一个节点,找出所有祖先的个数。但是本题有可能出现不连通,即单个点。如果这样判断单个点也会算作其中,但是单个点可以属于任何一个集合,所以超过二也是正确的。

后来又尝试改进代码,仍然求出所有的祖先节点数,算上不连通点,最后判断总数是不是偶数。但是还是有问题,比如说有两群点以及一个单个的点,总共三个祖先节点,但是该单个点可以算作其中任何一群,所以是二分图,但是该程序会判断不是二分图。

后来干脆不管不连通点,先使用一个数组遍历标记每个点是不是不连通的,然后在最后求祖先节点的个数时,如果是不连通点则直接跳过。发现还是有问题。具体问题好像忘了?

最后又尝试使用set来判断,仍然不行。最后的最后将整个代码完全使用set,使用两个set,set1和set2,但是代码逻辑上有点问题导致有几个用例无法通过,虽然绝大多数都能通过。

总结出:大道至简。复杂的判断复杂的逻辑绕到最后可能还是错的。真正的解法应该很简单很美妙。如上述代码,判断结束条件为如果当前节点和其邻接点已经是同一个集合的了,则直接返回错误。否则如果到最后都没有发现错误则返回正确。

方法二:深搜

我们任选一个节点开始,将其染成红色,并从该节点开始对整个无向图进行遍历;

在遍历的过程中,如果我们通过节点 u 遍历到了节点 v(即 u 和 v 在图中有一条边直接相连),那么会有两种情况:

如果 v 未被染色,那么我们将其染成与 u 不同的颜色,并对 v 直接相连的节点进行遍历;

如果 v 被染色,并且颜色与 u 相同,那么说明给定的无向图不是二分图。我们可以直接退出遍历并返回 false 作为答案。

当遍历结束时,说明给定的无向图是二分图,返回 true 作为答案。

class Solution {
public:vector<int>color;bool vaild=true;void dfs(vector<vector<int>>& graph,int x,int c){color[x]=c;for(int i=0;i<graph[x].size();i++){if(color[graph[x][i]]==c){vaild=false;return;}else if(color[graph[x][i]]==0)dfs(graph,graph[x][i],c==1?2:1);}}bool isBipartite(vector<vector<int>>& graph) {color.resize(graph.size(),0);for(int i=0;i<graph.size();i++){if(color[i]==0)dfs(graph,i,1);}return vaild;}
};

方法三:广搜

思路与深搜类似

class Solution {
private:static constexpr int UNCOLORED = 0;static constexpr int RED = 1;static constexpr int GREEN = 2;vector<int> color;public:bool isBipartite(vector<vector<int>>& graph) {int n = graph.size();vector<int> color(n, UNCOLORED);for (int i = 0; i < n; ++i) {if (color[i] == UNCOLORED) {queue<int> q;q.push(i);color[i] = RED;while (!q.empty()) {int node = q.front();int cNei = (color[node] == RED ? GREEN : RED);q.pop();for (int neighbor: graph[node]) {if (color[neighbor] == UNCOLORED) {q.push(neighbor);color[neighbor] = cNei;}else if (color[neighbor] != cNei) {return false;}}}}}return true;}
};

相关文章:

算法——图论:判断二分图(染色问题)

题目&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;并查集 class Solution { public:vector<int>father;int find(int x){if (father[x] ! x)father[x] find(father[x]);return father[x];}void add(int x1, int x2){int fa1 find(x1), f…...

三步提升IEDA下载速度——修改IDEA中镜像地址

找到IDEA的本地安装地址 D:\tool\IntelliJ IDEA 2022.2.4\plugins\maven\lib\maven3\conf 搜索阿里云maven仓库 复制https://developer.aliyun.com/mvn/guide中红框部分代码 这里也是一样的&#xff1a; <mirror><id>aliyunmaven</id><mirrorOf>*&…...

CentOS7 RPM升级支持BBR TCP/CC的内核版本

列出安装的内核 rpm -qa kernel # yum list installed kernel 删除已安装内核 sudo dnf remove kernel-4.0.4-301.fc22.x86_64 安装内核 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noar…...

文本向量模型BGE与BGE-M3

BGE模型 BGE模型对应的技术报告为《C-Pack: Packaged Resources To Advance General Chinese Embedding》 训练数据 为了训练BGE向量模型&#xff0c;构建了C-MTP数据集&#xff0c;它包括了用来训练文本向量的文本对数据&#xff08;问答对、两个同义句子、相同主题的两个文…...

【黑马头条】-day04自媒体文章审核-阿里云接口-敏感词分析DFA-图像识别OCR-异步调用MQ

文章目录 day4学习内容自媒体文章自动审核今日内容 1 自媒体文章自动审核1.1 审核流程1.2 内容安全第三方接口1.3 引入阿里云内容安全接口1.3.1 添加依赖1.3.2 导入aliyun模块1.3.3 注入Bean测试 2 app端文章保存接口2.1 表结构说明2.2 分布式id2.2.1 分布式id-技术选型2.2.2 雪…...

新能源充电桩站场AI视频智能分析烟火检测方案及技术特点分析

新能源汽车充电起火的原因多种多样&#xff0c;涉及技术、设备、操作等多个方面。从技术层面来看&#xff0c;新能源汽车的电池管理系统可能存在缺陷&#xff0c;导致电池在充电过程中出现过热、短路等问题&#xff0c;从而引发火灾。在设备方面&#xff0c;充电桩的设计和生产…...

springboot集成logback-spring.xml文件

彩色日志日志分debug和error文件输出&#xff0c;方便开发人员运维日志限制最大保管天数日志限制总量大小占用量GB日志限制单个文件大小MB日志显示最大保留天数屏蔽没用的日志 <?xml version"1.0" encoding"UTF-8"?> <!--~ Copyright (c) 2020…...

centos7 安装 nginx

一、yum 方式安装 1.安装yum工具 sudo yum install yum-utils 2. 安装epel yum install epel-release 3.安装nginx&#xff1a; yum install nginx 4.查看版本 nginx -v 5.设置开机自启动 systemctl enable nginx nginx 常用命令&#xff1a; 1&#xff09;启动nginx …...

29. UE5 RPG应用GamplayAbility

前面几篇文章&#xff0c;总算把GE给更新完了&#xff0c;GE的基础应用也算讲清楚了。接下来&#xff0c;我们将更新GA的相应的课程了&#xff0c;首先&#xff0c;这一篇先对GA做一个简单的介绍&#xff0c;然后实现一下如何实现给角色应用一个GA。 简介 GamplayAbility 简称…...

http和https的区别!

HTTP 明文传输&#xff0c;数据都是未加密的&#xff0c;安全性较差&#xff0c;HTTPS&#xff08;SSLHTTP&#xff09; 数据传输过程是加密的&#xff0c;安全性较好。 使用 HTTPS 协议需要到 CA&#xff08;Certificate Authority&#xff0c;数字证书认证机构&#xff09; …...

使用AOP实现打印日志

首先创建annotation.SystemLog类&#xff1a; package com.gjh.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;Target(ElementType.METHOD…...

2024年新算法-冠豪猪优化算法(CPO),CPO-RF-Adaboost,CPO优化随机森林RF-Adaboost回归预测-附代码

冠豪猪优化算法&#xff08;CPO&#xff09;是一种基于自然界中猪群觅食行为启发的优化算法。该算法模拟了猪群在寻找食物时的集群行为&#xff0c;通过一系列的迭代过程来优化目标函数&#xff0c;以寻找最优解。在这个算法中&#xff0c;猪被分为几个群体&#xff0c;每个群体…...

浅谈高阶智能驾驶-NOA领航辅助的技术与发展

浅谈高阶智能驾驶-NOA领航辅助的技术与发展 附赠自动驾驶学习资料和量产经验&#xff1a;链接 2019年在国内首次试驾特斯拉NOA领航辅助驾驶的时候&#xff0c;当时兴奋的觉得未来已来;2020年在试驾蔚来NOP领航辅助驾驶的时候&#xff0c;顿时不敢小看国内新势力了;现在如果哪家…...

大模型 智能体 智能玩具 智能音箱 构建教程 wukong-robot

视频演示 10:27 一、背景 继上文《ChatGPT+小爱音响能擦出什么火花?》可以看出大伙对AI+硬件的结合十分感兴趣,但上文是针对市场智能音响的AI植入,底层是通过轮询拦截,算是hack兼容,虽然官方有提供开发者接口,也免不了有许多局限性(比如得通过特定指令唤醒),不利于我…...

Clickhouse-表引擎探索之MergeTree

引言 前文曾说过&#xff0c;Clickhouse是一个强大的数据库Clickhouse-一个潜力无限的大数据分析数据库系统 其中一个强大的点就在于支持各类表引擎以用于不同的业务场景。 MergeTree MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一…...

网络电视盒子哪个好?小编分享电视盒子品牌排行榜

电视盒子使用频率高&#xff0c;功能丰富&#xff0c;价格划算&#xff0c;是我们日常不可或缺的部分&#xff0c;小编经常会被问到与电视盒子相关的问题&#xff0c;考虑到很多朋友并不了解网络电视盒子哪个好&#xff0c;这次我来分享业内权威电视盒子品牌排行榜&#xff0c;…...

开源模型应用落地-baichuan2模型小试-入门篇(三)

一、前言 相信您已经学会了如何在Windows环境下以最低成本、无需GPU的情况下运行baichuan2大模型。现在,让我们进一步探索如何在Linux环境下,并且拥有GPU的情况下运行baichuan2大模型,以提升性能和效率。 二、术语 2.1. CentOS CentOS是一种基于Linux的自由开源操作…...

景联文科技高质量大模型训练数据汇总!

3月25日&#xff0c;2024年中国发展高层论坛年会上&#xff0c;国家数据局局长刘烈宏在“释放数据要素价值&#xff0c;助力可持续发展”的演讲中表示&#xff0c;中国10亿参数规模以上的大模型数量已超100个。 当前&#xff0c;国内AI大模型发展仍面临诸多困境。其中&#xff…...

【python】正则表达式

文章目录 正则表达式对象re.RegexObjectre.MatchObject符号说明匹配基础匹配?=、?<=、?!、?<!字符类re模块编译正则表达式compile 函数匹配字符串re.matchre.searchre.findall...

学习vue3第十二节(组件的使用与类型)

1、组件的作用用途 目的&#xff1a; 提高代码的复用度&#xff0c;和便于维护&#xff0c;通过封装将复杂的功能代码拆分为更小的模块&#xff0c;方便管理&#xff0c; 当我们需要实现相同的功能时&#xff0c;我们只需要复用已经封装好的组件&#xff0c;而不需要重新编写相…...

nlp_structbert_sentence-similarity_chinese-large实战教程:本地知识库向量化检索完整指南

nlp_structbert_sentence-similarity_chinese-large实战教程&#xff1a;本地知识库向量化检索完整指南 你是不是经常遇到这样的问题&#xff1a;面对公司内部堆积如山的文档、产品手册、客服记录&#xff0c;想找某个特定信息时&#xff0c;却像大海捞针一样困难&#xff1f;…...

FanControl终极指南:如何在Windows上实现专业级风扇控制与噪音优化[特殊字符]

FanControl终极指南&#xff1a;如何在Windows上实现专业级风扇控制与噪音优化&#x1f525; 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitco…...

Sqoop网络传输优化指南:从数据传输机制到带宽调优实战

Sqoop网络传输优化指南&#xff1a;从数据传输机制到带宽调优实战1. 引言&#xff1a;数据迁移的命脉在于网络2. Sqoop数据传输机制深度解析2.1 架构设计&#xff1a;基于MapReduce的并行传输2.2 导入数据的工作机制2.3 导出数据的工作机制2.4 网络交互的核心模式3. 优化网络带…...

Simulink频域分析避坑指南:如何准确获取谐振频率(含MATLAB代码)

Simulink频域分析实战&#xff1a;谐振频率精准提取方法论与MATLAB实现 在控制系统设计与分析领域&#xff0c;频域特性是评估系统动态性能的核心指标之一。而谐振频率作为频域响应中的关键特征点&#xff0c;直接影响着系统的稳定性和响应速度。然而&#xff0c;许多工程师在使…...

紧急通知:2024年Q3起欧盟EDPS已将差分隐私实现纳入DPIA强制审查项——Python开发者必须立即核查的4个代码检查点

第一章&#xff1a;差分隐私合规性背景与EDPS新规解读随着欧盟数据保护监管体系持续演进&#xff0c;欧洲数据保护监督机构&#xff08;EDPS&#xff09;于2024年7月发布《关于匿名化与假名化技术在公共部门应用的指导意见》&#xff0c;首次将差分隐私&#xff08;Differentia…...

开源动作捕捉与3D数据采集:FreeMoCap如何颠覆传统动捕方案

开源动作捕捉与3D数据采集&#xff1a;FreeMoCap如何颠覆传统动捕方案 【免费下载链接】freemocap Free Motion Capture for Everyone &#x1f480;✨ 项目地址: https://gitcode.com/GitHub_Trending/fr/freemocap 在游戏开发、动画制作和运动科学研究领域&#xff0c…...

DHCP实验1

一、实验拓扑二、实验需求 1.PC1和PC2使用路由器模拟2.PC1和R1的g0/0口连接到SW的vlan10&#xff1b;PC2和R1的g0/1口连接到SW的vlan203.R1在vlan10的IP地址为192.168.1.1/24&#xff0c;vlan20的IP地址为192.168.2.1/244.在R1上配置DHCP服务&#xff0c;分别为2个网段分配IP地…...

OpenClaw环境隔离方案:GLM-4.7-Flash多项目独立配置

OpenClaw环境隔离方案&#xff1a;GLM-4.7-Flash多项目独立配置 1. 为什么需要环境隔离&#xff1f; 去年夏天&#xff0c;我同时接手了两个截然不同的自动化项目&#xff1a;一个是帮朋友处理电商数据整理的私人需求&#xff0c;另一个是公司内部的知识库维护工作。当我兴冲…...

新手福音:通过快马平台生成带注释的nap自动化运维脚本快速入门

作为一个刚接触网络自动化运维的新手&#xff0c;第一次看到"深圳网络自动化运维nap"这个概念时&#xff0c;整个人都是懵的。各种专业术语、复杂的协议和库让我望而却步&#xff0c;直到发现了InsCode(快马)平台&#xff0c;才真正找到了入门的好方法。 为什么选择n…...

Qwen3-VL-8B数据库课程设计:构建一个多模态商品智能检索系统

Qwen3-VL-8B数据库课程设计&#xff1a;构建一个多模态商品智能检索系统 最近有个学弟跑来问我&#xff0c;说数据库课程设计不知道做什么好&#xff0c;想做个有技术含量又能拿高分的项目。我给他提了个建议&#xff0c;用现在很火的多模态大模型&#xff0c;结合传统的数据库…...