يمكن وصف الخوارزمية على النحو التالي: strong>
إعطاء رسم بياني موجه برؤوس n وحواف m. مطلوب إعادة ترقيم رؤوسها بطريقة تؤدي بها كل حافة من قمة ذات رقم أقل إلى قمة ذات رأس أعلى. div>
بعبارة أخرى ، مطلوب إيجاد تبديل للرؤوس (ترتيب طوبولوجي) يتوافق مع الترتيب الذي تقدمه جميع حواف الرسم البياني.
سنستخدم بحث العمق أولاً (dfs (v))
إذا أضفنا رأسنا إلى بداية القائمة وقت الخروج من & nbsp؛
\ (dfs (v) \) & nbsp ؛، ثم في النهاية في هذه القائمة تحصل على تصنيف طوبولوجي. div>
وهكذا ، النوع الطوبولوجي المطلوب & [مدش] ؛ يتم ترتيب ذلك بترتيب تنازلي لأوقات الخروج. strong>
Problem
بالنظر إلى رسم بياني موجه غير مرجح. & nbsp ؛ من الضروري فرزها طوبولوجيًا.
الإدخال: & nbsp؛ يحتوي السطر الأول على عددين طبيعيين n و m (1 & le؛ n & le؛ 10
5 ، 1 & le؛ m & le؛ 10
5 ) & [مدش] ؛ عدد الرؤوس والحواف في الرسم البياني ، على التوالي. تسرد سطور m التالية حواف الرسم البياني. يتم إعطاء كل حافة بواسطة زوج من الأرقام و [مدش] ؛ عدد رؤوس البداية والنهاية ، على التوالي.
& nbsp؛
الإخراج: & nbsp؛ اطبع أي نوع طوبولوجي للرسم البياني كسلسلة من أرقام الرؤوس. إذا تعذر ترتيب الرسم البياني طوبولوجيًا ، اطبع & ناقص؛ 1.
يحتوي السطر الأول على عدد الرؤوس N والحواف M. & nbsp؛
أمثلة strong>
# |
إدخال |
الإخراج |
<الجسم>
1 |
4 4
14
4 3
4 2
3 2 |
1 4 3 2 |