কম্পিউটার টিউটোরিয়াল

অল-পেয়ার শর্টেস্ট পাথস (ফ্লয়েড-ওয়ার্শাল)

অল পেয়ার শর্টেস্ট পাথ অ্যালগরিদমকে ফ্লয়েড-ওয়ার্শাল অ্যালগরিদমও বলা হয়, যা একটি দেয়া ওয়েটেড গ্রাফ থেকে সকল জোড়ার শর্টেস্ট পাথ বের করতে ব্যবহৃত হয়। এই অ্যালগরিদমের ফলাফল হিসেবে, একটি ম্যাট্রিক্স জেনারেট হবে, যা গ্রাফের যেকোনো নোড থেকে অন্য সব নোড পর্যন্ত মিনিমাম ডিস্ট্যান্স উপস্থাপন করবে।

অল-পেয়ার শর্টেস্ট পাথস (ফ্লয়েড-ওয়ার্শাল)

প্রথমে আউটপুট ম্যাট্রিক্স দেওয়া কস্ট ম্যাট্রিক্সের সমান। তারপর আউটপুট ম্যাট্রিক্স সব ভার্টেক্স k কে ইন্টারমিডিয়েট ভার্টেক্স ধরে আপডেট করা হয়।

এই অ্যালগরিদমের টাইম কমপ্লেক্সিটি O(V³), এখানে V হলো গ্রাফের ভার্টেক্স সংখ্যা।

ইনপুট − গ্রাফের কস্ট ম্যাট্রিক্স।

0 3 6 ∞ ∞ ∞ ∞
3 0 2 1 ∞ ∞ ∞
6 2 0 1 4 2 ∞
∞ 1 1 0 2 ∞ 4
∞ ∞ 4 2 0 2 1
∞ ∞ 2 ∞ 2 0 1
∞ ∞ ∞ 4 1 1 0

আউটপুট − অল পেয়ার শর্টেস্ট পাথের ম্যাট্রিক্স।

0 3 4 5 6 7 7
3 0 2 1 3 4 4
4 2 0 1 3 2 3
5 1 1 0 2 3 3
6 3 3 2 0 2 1
7 4 2 3 2 0 1
7 4 3 3 1 1 0

অ্যালগরিদম

floydWarshal(cost)

ইনপুট − দেয়া গ্রাফের কস্ট ম্যাট্রিক্স।

আউটপুট − যেকোনো ভার্টেক্স থেকে যেকোনো ভার্টেক্স পর্যন্ত শর্টেস্ট পাথের ম্যাট্রিক্স।

Begin
    for k := 0 to n, do
        for i := 0 to n, do
            for j := 0 to n, do
                if cost[i,k] + cost[k,j] < cost[i,j], then
                    cost[i,j] := cost[i,k] + cost[k,j]
                done
            done
        done
    display the current cost matrix
End

উদাহরণ (C++)

#include 
#include 
#define NODE 7
#define INF 999
using namespace std;
int costMat[NODE][NODE] = {
    {0, 3, 6, INF, INF, INF, INF},
    {3, 0, 2, 1, INF, INF, INF},
    {6, 2, 0, 1, 4, 2, INF},
    {INF, 1, 1, 0, 2, INF, 4},
    {INF, INF, 4, 2, 0, 2, 1},
    {INF, INF, 2, INF, 2, 0, 1},
    {INF, INF, INF, 4, 1, 1, 0}
};
void floydWarshal(){
    int cost[NODE][NODE];
    for(int i = 0; i < NODE; i++)
        for(int j = 0; j < NODE; j++)
            cost[i][j] = costMat[i][j];
    for(int k = 0; k < NODE; k++){
        for(int i = 0; i < NODE; i++)
            for(int j = 0; j < NODE; j++)
                if(cost[i][k]+cost[k][j] < cost[i][j])
                    cost[i][j] = cost[i][k]+cost[k][j];
    }
    cout << "The matrix:" << endl;
    for(int i = 0; i < NODE; i++){
        for(int j = 0; j < NODE; j++)
            cout << setw(3) << cost[i][j];
        cout << endl;
    }
}
int main(){
    floydWarshal();
}

আউটপুট

The matrix:
0 3 5 4 6 7 7
3 0 2 1 3 4 4
5 2 0 1 3 2 3
4 1 1 0 2 3 3
6 3 3 2 0 2 1
7 4 2 3 2 0 1
7 4 3 3 1 1 0
  1. সিঙ্গেল-সোর্স শর্টেস্ট পাথস, আর্বিট্রারি ওয়েটস (বেলমান-ফোর্ড)

  2. সিঙ্গেল-সোর্স শর্টেস্ট পাথস, নন-নেগেটিভ ওয়েটস (ডিকস্ট্রা)

  3. ডেটা স্ট্রাকচরে ইয়েনস k-শর্টেস্ট পাথ অ্যালগরিদম

  4. C++-এ বাইনারি ট্রিতে সিউডো-প্যালিনড্রোমিক পাথ গণনা