Menu
CoddyTech

Is Graph Bipartite

ふつうグラフキューpython iconjava iconcpp iconc iconjs icon+10

グラフには n 個のノードがあり、0 から n-1 までのラベルが付いています。edges 内の各ペア [a, b] は、ノード a とノード b の間の無向辺を表します。グラフはいくつかの独立した部分に分かれている場合があり、辺をまったく持たないノードもあります。

すべての辺が一方のグループのノードともう一方のグループのノードを結ぶように、ノードを2つのグループに分けられるとき、グラフは二部グラフです。グラフが二部グラフなら true を、そうでなければ false を返してください。

関数

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
ノードの数。0 から n-1 まで番号が付けられている
edgesinteger-2d-array
無向辺。それぞれがペア [a, b] です
戻り値boolean
ノードを 2 つのグループに分け、すべての辺がグループ間にある場合は true、そうでなければ false

制約

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b]、0 ≤ a, b ≤ n-1かつa ≠ b
  • どの辺も、どちらの方向から見ても2回現れることはありません。

例

入力
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
出力
true
説明
ノード 0 と 2 を一方のグループに、ノード 1 と 3 をもう一方のグループに入れます。4 本の辺はそれぞれ、2 つのグループを結びます。
challenge icon

発展問題

グラフが二部グラフでない場合、証明として奇数長の閉路を1つ、そのノードを順番に並べて返せますか?

コードをリセット
def isBipartite(n, edges):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

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

期待される出力

true