Menu
CoddyTech

Is Graph Bipartite

Một đồ thị có n nút, được gắn nhãn từ 0 đến n-1. Mỗi cặp [a, b] trong edges là một cạnh vô hướng nối nút a với nút b. Đồ thị có thể gồm nhiều phần tách biệt, và một số nút có thể không có cạnh nào.

Đồ thị là đồ thị hai phía (bipartite) khi bạn có thể chia các nút thành hai nhóm sao cho mỗi cạnh nối một nút thuộc nhóm này với một nút thuộc nhóm kia. Trả về true nếu đồ thị là đồ thị hai phía và false nếu không phải.

Hàm

isBipartite(n: integer, edges: integer-2d-array) → boolean
ninteger
số nút, được đánh số từ 0 đến n-1
edgesinteger-2d-array
các cạnh vô hướng, mỗi cạnh là một cặp [a, b]
Trả vềboolean
true nếu có thể chia các nút thành hai nhóm sao cho mọi cạnh đều nối hai nhóm, false nếu không

Ràng buộc

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [a, b] với 0 ≤ a, b ≤ n-1 và a ≠ b
  • Không có cạnh nào xuất hiện hai lần, dù theo hướng nào.

Ví dụ

Đầu vào
n = 4edges = [[0, 1], [1, 2], [2, 3], [3, 0]]
Đầu ra
true
Giải thích
Đặt các nút 0 và 2 vào một nhóm, các nút 1 và 3 vào nhóm còn lại. Cả bốn cạnh đều nối hai nhóm.
challenge icon

Câu hỏi mở rộng

Khi đồ thị không phải là đồ thị hai phía, bạn có thể trả về một chu trình có độ dài lẻ làm bằng chứng, liệt kê các nút theo thứ tự không?

Đặt lại code
def isBipartite(n, edges):
    # Viết code ở đây

Kiểm thử #1

Kiểm thử #2

Kiểm thử #3

Đối số

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

Đầu ra mong đợi

true