Menu
CoddyTech

Strongly Connected Components

يحتوي الرسم البياني الموجَّه على 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