Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

फ्लॉयड वार्शल एल्गोरिदम

फ्लॉयड-वार्शल एल्गोरिदम का उपयोग दिए गए वेटेड ग्राफ से सभी जोड़े के सबसे छोटे पथ की समस्या को हल करने के लिए किया जाता है। इस एल्गोरिदम के परिणामस्वरूप, यह एक मैट्रिक्स जनरेट करेगा, जो ग्राफ में किसी भी नोड से अन्य सभी नोड्स तक की न्यूनतम दूरी को दर्शाएगा।

सबसे पहले, आउटपुट मैट्रिक्स ग्राफ के दिए गए कॉस्ट मैट्रिक्स के समान होता है। उसके बाद, सभी वर्टेक्स 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)

इनपुट: दिए गए ग्राफ का कॉस्ट मैट्रिक्स
आउटपुट: किसी भी वर्टेक्स से किसी भी वर्टेक्स तक सबसे छोटे पथ के लिए मैट्रिक्स

शुरुआत
    k := 0 से n तक, करें
        i := 0 से n तक, करें
            j := 0 से n तक, करें
                यदि cost[i,k] + cost[k,j] < cost[i,j], तो
                    cost[i,j] := cost[i,k] + cost[k,j]
            पूर्ण
        पूर्ण
    पूर्ण
    वर्तमान कॉस्ट मैट्रिक्स प्रदर्शित करें
अंत

उदाहरण (C++ कोड)

#include <iostream>
#include <iomanip>
#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. फोर्ड-फुल्करसन एल्गोरिदम फोर्ड-फुल्करसन एल्गोरिदम

    फोर्ड-फुल्करसन एल्गोरिदम का उपयोग दिए गए ग्राफ में प्रारंभ शीर्ष से सिंक शीर्ष तक अधिकतम प्रवाह का पता लगाने के लिए किया जाता है। इस ग्राफ में, प्रत्येक किनारे की क्षमता होती है। दो शीर्ष दिए गए हैं जिन्हें स्रोत और सिंक नाम दिया गया है। स्रोत शीर्ष में सभी जावक किनारे होते हैं, कोई आवक किनारा नहीं

  1. - डेटा स्ट्रक्चर में एल्गोरिदम विशिष्टता-परिचय

    एक एल्गोरिदम को निर्देशों के एक परिमित समूह (Finite Set of Instructions) के रूप में परिभाषित किया जाता है जिसका पालन करने पर एक विशेष कार्य पूरा होता है। सभी एल्गोरिदम निम्नलिखित मानदंडों को पूरा करना चाहिए: इनपुट (Input): एक एल्गोरिदम में शून्य या अधिक इनपुट होते हैं, जो वस्तुओं के एक निर्दिष्ट स

  1. - मैट्रिक्स गुणन एल्गोरिदम

    इस खंड में हम देखेंगे कि दो मैट्रिक्स को कैसे गुणा किया जाए। मैट्रिक्स गुणन केवल तभी किया जा सकता है जब यह शर्त पूरी होती है। मान लीजिए दो मैट्रिक्स A और B हैं, और उनके आयाम A (m x n) और B (p x q) हैं तो परिणाम मैट्रिक्स तभी पाया जा सकता है जब n = p। तब परिणाम मैट्रिक्स C का क्रम (m x q) होगा।एल्गोर