Menu
CoddyTech

Is Graph Bipartite

בינוניגרפיםתורpython iconjava iconcpp iconc iconjs icon+10

בגרף יש n צמתים, המסומנים מ-0 עד n-1. כל זוג [a, b] בתוך edges מייצג קשת לא מכוונת בין הצומת 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