Problem

8/14

خوارزمية Dijkstra في مجموعة O (M logN) c: ابدأ (C ++)

Theory Click to read/hide

نظرًا لأن السلوك المقارب للتنفيذ الساذج لخوارزمية Dijkstra هو: & nbsp؛ \ (O (n ^ 2 + m) \) ، فكلما زاد عدد الرؤوس ، سرعة العمل تصبح غير مرضية.
& nbsp؛ يمكن استخدام هياكل البيانات المختلفة للتحسين: & nbsp؛ Fibonacci heaps، set مجموعات أو قائمة انتظار ذات أولوية & nbsp؛ priority_queue. & nbsp؛
ضع في اعتبارك مثالًا باستخدام set ، ونتيجة لذلك ، فإن المقاربات النهائية هي: & nbsp؛ \ (O (n log (m)) \) ، التفاصيل .

Problem

يتم إعطاؤك رسم بياني مرجح موجه. أوجد أقصر مسافة من رأس معين إلى آخر.
& nbsp؛
إدخال
يحتوي السطر الأول على ثلاثة أرقام: N و M و S و F (1 & le؛ N & le؛ 100، 1 & le؛ S، F & le؛ N) ، حيث N & ndash؛ عدد رؤوس الرسم البياني M & ndash؛ عدد الأضلاع ، نبسب ؛ ال & ndash؛ الرأس الأولي و F & ndash؛ أخير. في السطور N التالية ، أدخل أرقام N لكل منها ، بما لا يتجاوز 100 ، & ndash؛ مصفوفة تجاور الرسم البياني ، حيث يعني -1 عدم وجود حافة بين الرؤوس وأي رقم غير سالب & ndash؛ وجود حافة وزن معين. الأصفار مكتوبة على القطر الرئيسي للمصفوفة.
& nbsp؛
الإخراج
مطلوب عرض المسافة المرغوبة أو -1 إذا لم يكن هناك مسار بين الرؤوس المحددة.

أمثلة <الجسم>
# إدخال الإخراج
1 4 4 3 4
3 1 3
1 2 3
2 4 3
3 4 10
9