Problem

1/14

Dijkstra: البداية (C ++)

Theory Click to read/hide

إعطاء رسم بياني مرجح موجه أو غير موجه برؤوس n وحواف m. أوزان جميع الحواف غير سالبة. تم تحديد بعض قمة البداية s. تحتاج إلى العثور على أطوال أقصر المسارات من قمة الرأس s إلى جميع الرؤوس الأخرى ، وكذلك توفير طريقة لطباعة أقصر المسارات نفسها.
& nbsp؛
تسمى هذه المشكلة "مشكلة أقصر مسار بمصدر واحد" (مصدر واحد مشكلة أقصر المسارات).
يؤدي نفس المهام مثل 1-K BFS ، ولكن بغض النظر عن K. أيضًا ، مثل 1-K BFS ، فإنه لا يتعامل بشكل صحيح مع الحواف السلبية

الخوارزمية :
تتكون خوارزمية Dijkstra نفسها من تكرارات N. في التكرار التالي ، قمة الرأس V & nbsp؛ مع أصغر مسافة إليه من بين القمم التي لم يتم تحديدها بعد ، يتم تمييز هذا الرأس ويحدث ارتخاء القمم المجاورة منه.


& nbsp ؛ السلوك المقارب النهائي للخوارزمية هو: O (n 2 + m)

Problem

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

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