判断二分图【bfs】
题目是判断二分图
给定一个可能不是连通的无向图,我们需要判断此图是不是一个二分图。
在一个连通的无向图内,判断二分图的方法为:
- 初始化所有结点都未染色,染色数组color初始化全未0
- 从任意一个结点开始,将其染为颜色1,并从该结点开始遍历整个图
- 如果我们通过u结点和v结点之间的边遍历到了v结点
有以下两种情况:
- 如果v未被染色,那么我们将其染成于u不同的颜色,并从v继续往下遍历
- 如果v被染色,v的颜色如果于u相同的话,则说明不是一个二分图,返回false
当遍历结束的时候,返回true
由于题目给定的无向图不保证一定连通,因此我们需要进行多次遍历,直到每一个结点都被染色或者确定答案为false之后才能返回
bool isBipartite(vector<vector<int>>& graph) {int n=graph.size();vector<int>color(n,0);for(int i=0;i<n;i++){ //需要多次遍历直到所有结点被遍历if(color[i]==0){ //从一个没有被染色的结点开始queue<int>q;q.push(i);color[i]=1; //将其染色为颜色1while(!q.empty()){int cur=q.front();int c; //记录与cur相连的结点应该染的颜色if(color[cur]==1) c=2;else if(color[cur]==2) c=1;else c=0;q.pop();for(auto& g:graph[cur]){ //遍历与cur相连的结点if(color[g]==0){ //如果未被染色q.push(g); //加入队列color[g]=c; //将其染色为c}else if(color[g]!=c) return false; //不是他应该的颜色直接返回false}}}}return true; //遍历完之后返回true
}
判断二分图【bfs】相关推荐
- [Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
[问题描述][中等] [解答思路] 1. DFS 深度优先遍历 时间复杂度:O(N+M) 空间复杂度:O(N) class Solution {private static final int UNC ...
- leetcode785. 判断二分图(dfs和bfs染色)
给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图 ...
- HDU - 2444——The Accomodation of Students(判断二分图,二分图最大匹配)
题意: 题意: 有n个人,m对人相互认识: 问能否分成两个组,组内任意两个人之间不认识: 若不能,则输出No: 若能,则相互认识的两个人一间房,求最多需要几间房: 给出一些学生的认识情况,比如A和B认 ...
- LeetCode_二分图_中等_785. 判断二分图
目录 1.题目 2.思路 3.代码实现(Java) 1.题目 存在一个无向图,图中有 n 个节点.其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号.给你一个二维数组 graph,其中 gr ...
- hdu 5285(染色法判断二分图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5285 解题思路:很明显的是二分图的判定,用染色法即可. 不过这题有一个坑,当n<=1和m=0时要 ...
- CodeForces - 1354E Graph Coloring(dfs判断二分图+dp)
题目链接:点击查看 题目大意:给出一个由 n 个点和 m 条边组成的无向图,要求给 n 个点赋值为 1 . 2 或 3 ,需要满足以下条件: 每个点都需要被赋值 权值为 1 的点共 n1 个 权值为 ...
- HDU - 2444 The Accomodation of Students(二分图判断+二分图最大匹配)
题目链接:点击查看 题目大意:给出n个学生,他们之间有m个认识关系,但认识关系不具有传递性,比如A认识B,B认识C,A不一定认识C,现在给出认识关系,先判断是否能够将所有学生分为两个集合A和B中去,集 ...
- 图论 —— 染色法判断二分图
二分图定义 二分图,又称二部图,英文名叫 Bipartite graph. 二分图是什么?节点由两个集合组成,且两个集合内部没有边的图.换言之,存在一种方案,将节点划分成满足以上性质的两个集合. 二分 ...
- E. Split Into Two Sets(染色法判断二分图)
Problem - 1702E - Codeforces 波利卡普最近得到了一组n(数字n-偶数)的骨牌.每块多米诺骨牌包含1到n的两个整数. 他能把所有的骨牌分成两组,使每组骨牌上的数字都不一样吗? ...
最新文章
- JDBC连接执行MySQL存储过程报空指针或权限错误
- CentOS 7编译安装php7.0.7以及可能遇到的问题的解决方案
- python socket 简介
- 使用VS进行远程调试
- 五百字简文告诉你美国为何要倾一国之力对中国的一家民营企业华为痛下杀手?...
- 编php矩阵求和,PHP二维数组如何求和?
- 计算机入门 姚班,清华“姚班”:学霸中的尖子生,大佬毕业后都去哪了?
- 云服务器更换系统后tomcat,如何对云服务器装tomcat
- zabbix mysql 分离_编译安装zabbix3.0 并且与mysql分离
- 怀念的不是初恋,是那段时光
- nvivo三天写论文!社会网络分析实战
- 菲律宾php是啥,投资菲律宾马尼拉房产的本质是什么?
- 初学ansys:模态分析及谐响应分析
- 马尔可夫链 以及 隐马尔可夫模型(HMM)
- ECSHOP问题总结
- 3D点云深度学习综述
- X61的intel wireless 3945abg 不再掉线了
- 测试功能点----方法
- 倍福 TwinCAT背景知识
- R语言交叉验证(详细)