Module: الگوریتم فلوید


Problem

4 /10


کوتاه ترین راه

Theory Click to read/hide

اگر یک نمودار دارای چرخه هایی با وزن منفی است، به طور رسمی الگوریتم فلوید-وارشال برای چنین نموداری قابل اجرا نیست.

در واقع، برای آن جفت رئوس i  و j که بین آن‌ها نمی‌توان چرخه وزن منفی را وارد کرد، الگوریتم به درستی کار می‌کند.

برای همان جفت رئوس که پاسخی برای آنها وجود ندارد (به دلیل وجود یک چرخه منفی در مسیر بین آنها)، الگوریتم فلوید تعدادی عدد (احتمالاً به شدت منفی، اما نه لزوما) را به عنوان پاسخ پیدا می کند. با این حال، الگوریتم فلوید را می توان بهبود بخشید تا این جفت رئوس را به طور منظم مدیریت کند و خروجی به عنوان مثال \(- \infty\) داشته باشد.

برای انجام این کار، به عنوان مثال، معیار  "عدم وجود مسیر" را می توان انجام داد. بنابراین، اجازه دهید الگوریتم فلوید معمولی روی این نمودار کار کند. سپس کوتاهترین مسیری بین رئوس i و j اگر و فقط در صورتی وجود داشته باشد که یک راس t قابل دسترسی از i و از آن j قابل دسترسی باشد، که برای آن  \(d [t][t]<0\).

علاوه بر این، هنگام استفاده از الگوریتم فلوید برای نمودارهایی با چرخه های منفی، باید به خاطر داشت که فواصلی که در فرآیند کار به وجود می آیند می توانند با هر فاز به صورت نمایی منفی پیش بروند. بنابراین، باید با محدود کردن تمام فواصل از پایین به مقداری (به عنوان مثال،  \(- \infty\)) از سرریز اعداد صحیح مراقبت کنید.

به صورت کلامی، راه حل را می توان به شرح زیر توصیف کرد:
پس از اینکه الگوریتم فلوید-وارشال برای نمودار ورودی کار کرد، بیایید روی همه جفت رئوس \((i,j)\) و برای هر جفت از این قبیل تکرار کنیم. بررسی می کنیم، بی نهایت کوتاه ترین مسیر از i به j کوچک است یا خیر. برای انجام این کار، بیایید روی سومین راس t تکرار کنیم، و اگر معلوم شد که \(d[t][t] < 0\)  (یعنی در چرخه وزن منفی قرار دارد)، و از i و j — سپس مسیر \((i,j)\) می تواند بی نهایت کوچک باشد.

Problem

یک نمودار کامل جهت دار با چند وزن (طول) به لبه های آن به شما داده می شود. وزن ها می توانند مثبت، منفی یا صفر باشند. ما به حداقل طول تمام مسیرهای ممکن بین همه جفت رئوس متمایز در این نمودار علاقه مندیم. باید مشخص شود که آیا این حداقل وجود دارد یا خیر، و اگر وجود دارد، آن را محاسبه کنید. (اگر امکان یافتن مسیری با طول منفی در نمودار، به طور دلخواه در قدر مطلق بزرگ، تمایل به بی نهایت وجود داشته باشد، حداقل وجود ندارد).
 
ورودی
خط اول N≤50 راس است. بعد ماتریس مجاورت نمودار می آید، یعنی N ردیف که هر کدام حاوی N عدد است. عدد j در ردیف i ام ماتریس مجاورت طول یال منتهی به راس i به j ام را مشخص می کند. طول ها می توانند هر مقداری از -1000000 تا 1000000 داشته باشند. وجود صفر در مورب اصلی ماتریس تضمین شده است.
 
خروجی
چاپ یک عدد – حداقل مورد نیاز اگر وجود ندارد، خروجی  -1.
نمونه‌ها <سر> <بدن>
# ورودی خروجی
1
3
0 42 18468 
6335 0 26501 
19170 15725 0 
42
2
3
0 -7 3
-2 0 10
2 215 0 
-1