Menu
CoddyTech

Is Graph Bipartite

中等图队列python iconjava iconcpp iconc iconjs icon+10

一个图有 n 个节点,标签为 0 到 n-1。edges 中的每一对 [a, b] 都表示节点 a 和节点 b 之间的一条无向边。这个图可能分成几个互不相连的部分,有些节点也可能没有任何边。

如果可以将图中的节点分成两组,使每条边都连接一组中的一个节点和另一组中的一个节点,那么这个图就是二分图。如果图是二分图,返回 true,否则返回 false。

函数

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
节点的数量,编号从 0 到 n-1
edgesinteger-2d-array
无向边,每条边都是一对 [a, b]
返回值boolean
如果节点可以分成两组,并且每条边都连接这两组中的节点,则为真;否则为假。

约束条件

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b],其中 0 ≤ a, b ≤ n-1 且 a ≠ b
  • 没有一条边会重复出现,无论方向如何。

示例

输入
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
输出
true
解释
将节点 0 和 2 放在一组,将节点 1 和 3 放在另一组。这四条边都连接这两组。
challenge icon

进阶

当图不是二分图时,你能返回一个奇数长度的环作为证明,并按顺序列出环上的节点吗?

重置代码
def isBipartite(n, edges):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

n = 4
edges = [[0, 1], [1, 2], [2, 3], [3, 0]]

预期输出

true