Foundationপ্রথম নীতি থেকে
LEVEL 6 · Data Structures & Algorithms

Floyd-Warshall

ফ্লয়েড-ওয়ারশল

Dynamic programming দিয়ে সব node pair-এর shortest path — intermediate vertex হিসেবে k একে একে যোগ করে তিন nested loop-এ O(V³)।

also: floyd warshall, all pairs shortest paths

প্রশ্ন মাত্র একটা: i→j যেতে k-কে intermediate বানানো ভালো, না করা?

for k in range(V):
    for i in range(V):
        for j in range(V):
            if d[i][k] + d[k][j] < d[i][j]:
                d[i][j] = d[i][k] + d[k][j]

Dense graph-এ (E ≈ V²) V বার Dijkstra চালানোর চেয়ে সোজা আর খরচও কাছাকাছি। Negative cycle detect করতে শেষে d[i][i] < 0 দেখো।

Edge-গুলো boolean হলে min-এর জায়গায় OR বসিয়েই transitive closure বের হয়। Rolling array দিয়ে memory O(V³) থেকে O(V²)-তে নামে।