首页 > 试题广场 >

二分图判定

[编程题]二分图判定
  • 热度指数:1960 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一张包含 n 个节点、m 条无向边的图(不保证连通)。若存在一种方式可将每个节点染为黑色或白色,使得任意一条边的两个端点颜色不同,则称该图为二分图
\hspace{15pt}请判断所给图是否为二分图。

【名词解释】
\hspace{15pt}二分图:可将顶点集合划分为两个独立集,且所有边均连接不同集合的图。

输入描述:
\hspace{15pt}第一行输入两个整数 n,m\left(1\leqq n,m\leqq 10^{5}\right)——节点数与边数。 
\hspace{15pt}接下来的 m 行,每行输入两个整数 u_i,v_i\left(1\leqq u_i,v_i\leqq n\right),表示存在一条连接 u_iv_i 的无向边。保证无重边、自环。


输出描述:
\hspace{15pt}若该图为二分图,输出Yes;否则输出No。
示例1

输入

5 7
1 2
2 3
3 4
4 1
4 5
5 2

输出

Yes

说明

如图,把1, 3, 5点染色为白,2, 4染色为黑,即可满足二分图要求,所以这个图是二分图。
示例2

输入

5 4
1 2
2 3
3 1
4 5

输出

No

说明

1, 2, 3号点无论如何染色都无法满足要求,所以不是二分图。
头像 白伟仝
发表于 2020-05-12 20:40:52
import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.ne 展开全文
头像 bandiaoz
发表于 2024-12-26 15:05:08
解题思路 这是一道判断给定图是否为二分图的题目,主要思路如下: 二分图的定义: 可以将图中的顶点分成两个不相交的集合 每条边的两个顶点分别属于不同集合 可以用两种颜色对顶点染色,相邻顶点颜色不同 解决方案: 使用BFS进行染色 从任意未染色的点开始,将其染成颜色1 将其相邻点染成相反的 展开全文
头像 牛客题解官
发表于 2020-06-05 16:40:48
题解 题目难度:中等难度知识点:图、邻接矩阵、DFS DFS方法思路: 步骤一:构造邻接邻接矩阵G[N] 示例一点连接情况的输入:1 22 33 44 14 55 2其G[N]为: 步骤二:用color[N]表示点的着色情况,例如点2,color[2]=0表示点2未着色,color[2]=1表示点 展开全文