Menu
CoddyTech

Strongly Connected Components

קשהגרפיםpython iconjava iconcpp iconc iconjs icon+10

לגרף מכוון יש n צמתים, הממוספרים מ-0 עד n-1, ורשימה של edges, שבה [from, to] היא קשת מהצומת from אל הצומת to.

רכיב קשירות חזקה הוא קבוצה גדולה ביותר של צמתים, שבה כל צומת יכול להגיע לכל צומת אחר באמצעות מעבר לאורך קשתות. כל צומת שייך לרכיב אחד בדיוק, וצומת שאינו נמצא באף מעגל יוצר רכיב בפני עצמו. יש להחזיר את מספר רכיבי הקשירות החזקה.

פונקציה

countSCC(n: integer, edges: integer-2d-array) → integer
ninteger
מספר הצמתים
edgesinteger-2d-array
הקשתות המכוונות, כל אחת בצורה [from, to]
מחזירהinteger
מספר הרכיבים הקשירים היטב

אילוצים

  • 2 ≤ n ≤ 104
  • 1 ≤ edges.length ≤ 5000
  • edges[i] = [from, to] כאשר 0 ≤ from, to < n וגם from ≠ to
  • אף קשת אינה מופיעה פעמיים.

דוגמאות

קלט
n = 6edges = [[0, 1], [1, 2], [2, 0], [2, 3], [3, 4], [4, 3], [5, 4]]
פלט
3
הסבר
הצמתים 0, 1 ו-2 יוצרים לולאה, ולכן הם מגיעים זה לזה. הצמתים 3 ו-4 מצביעים זה על זה. הצומת 5 מגיע לצומת 4, אבל שום דבר לא חוזר לצומת 5, ולכן הוא עומד בפני עצמו: 3 רכיבים.
challenge icon

שאלת המשך

כמה שפחות קשתות תצטרך להוסיף כדי להפוך את כל הגרף לרכיב קשיר היטב יחיד?

איפוס הקוד
def countSCC(n, edges):
    # כתבו כאן קוד

בדיקה #1

בדיקה #2

ארגומנטים

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

הפלט הצפוי

3