Module: الگوریتم دایکسترا


Problem

8/14

الگوریتم Dijkstra در مجموعه O(M logN) c: شروع (C++)

Theory Click to read/hide

از آنجایی که رفتار مجانبی اجرای ساده الگوریتم دایکسترا این است: \(O(n^2 + m)\)، پس با افزایش تعداد رئوس، سرعت کار راضی کننده نمی شود.
 ساختارهای داده مختلفی را می توان برای بهبود استفاده کرد: تپه های فیبوناچی، مجموعه های set یا یک صف اولویت priority_queue. 
مثالی را با set در نظر بگیرید، در نتیجه، مجانب نهایی این است: \(O(n log (m))\) ، جزئیات.

Problem

یک نمودار وزنی جهت دار به شما داده می شود. کوتاه ترین فاصله را از یک راس داده شده به راس دیگر پیدا کنید.
 
ورودی
خط اول شامل سه عدد است: N، M، S و F (1≤ N≤ 100، 1≤ S، F≤ N)، که در آن N – تعداد رئوس نمودار، M – تعداد دنده،  S– راس اولیه، و F – نهایی در N سطر بعدی، هر کدام N عدد را وارد کنید که از 100 تجاوز نکند، – ماتریس مجاورت گراف، که در آن -1 به معنای عدم وجود لبه بین رئوس و هر عدد غیر منفی است – وجود لبه با وزن معین صفرها روی قطر اصلی ماتریس نوشته می شوند.
 
خروجی
اگر مسیری بین رئوس مشخص شده وجود نداشته باشد، باید فاصله مورد نظر یا -1 نمایش داده شود.

نمونه‌ها <سر> <بدن>
# ورودی خروجی
1 4 4 3 4
3 1 3
1 2 3
2 4 3
3 4 10
9