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

फोर्ड-फुल्करसन एल्गोरिदम


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

फोर्ड-फुल्करसन एल्गोरिदम

कुछ प्रतिबंध हैं:

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

इनपुट और आउटपुट

इनपुट: आसन्नता मैट्रिक्स: 0 10 0 10 0 0 0 0 4 2 8 0 0 0 0 0 0 10 0 0 0 0 9 0 0 0 6 0 0 10 0 0 0 0 0 0 आउटपुट: अधिकतम प्रवाह है: 19

एल्गोरिदम

bfs(vert, start, sink)

इनपुट: शीर्षों की सूची, प्रारंभ नोड, और सिंक नोड।

आउटपुट: जब सिंक देखा गया तो सच।

शुरू     प्रारंभ में सभी नोड्स को अनदेखा चिह्नित करें     प्रारंभ की स्थिति को देखा गया चिह्नित करें     प्रारंभ नोड का पूर्ववर्ती φ है       प्रारंभ को कतार qu में डालें     जब तक qu खाली नहीं है, करें       कतार से तत्व हटाएं और u शीर्ष पर सेट करें       अवशिष्ट ग्राफ में सभी शीर्ष i के लिए, करें         यदि u और i जुड़े हुए हैं, और i अनदेखा है, तो           शीर्ष i को कतार में जोड़ें           i का पूर्ववर्ती u है           i को देखा गया चिह्नित करें       किया     किया     वापस करें सच यदि सिंक शीर्ष की स्थिति देखी गई है अंत

fordFulkerson(vert, source, sink)

इनपुट: शीर्षों की सूची, स्रोत शीर्ष, और सिंक शीर्ष।

आउटपुट: प्रारंभ से सिंक तक अधिकतम प्रवाह।

शुरू     एक अवशिष्ट ग्राफ बनाएं और दिए गए ग्राफ को इसमें कॉपी करें     जब तक bfs(vert, source, sink) सच है, करें       pathFlow := ∞       v := सिंक शीर्ष       जब तक v ≠ प्रारंभ शीर्ष, करें         u := v का पूर्ववर्ती         pathFlow := pathFlow और residualGraph[u, v] का न्यूनतम         v := v का पूर्ववर्ती       किया       v := सिंक शीर्ष       जब तक v ≠ प्रारंभ शीर्ष, करें         u := v का पूर्ववर्ती         residualGraph[u,v] := residualGraph[u,v] – pathFlow         residualGraph[v,u] := residualGraph[v,u] – pathFlow         v := v का पूर्ववर्ती       किया       maxFlow := maxFlow + pathFlow     किया     maxFlow वापस करें अंत

उदाहरण

#include<iostream> #include<queue> #define NODE 6 using namespace std; typedef struct node {     int val;     int state; //स्थिति     int pred; //पूर्ववर्ती }node; int minimum(int a, int b) {     return (a 0 && vert[i].state == 0) {           que.push(vert[i]);           vert[i].pred = u.val;           vert[i].state = 1;         }       }     }     return (vert[sink.val].state == 1); } int fordFulkerson(node *vert, node source, node sink) {     int maxFlow = 0;     int u, v;     for(int i = 0; i

आउटपुट

Maximum flow is: 19

  1. सबसे छोटे पथ के लिए बेलमैन-फोर्ड एल्गोरिदम सबसे छोटे पथ के लिए बेलमैन-फोर्ड एल्गोरिदम

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

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

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

  1. C++ में बेलमैन-फोर्ड एल्गोरिदम C++ में बेलमैन-फोर्ड एल्गोरिदम

    बेलमैन-फोर्ड एल्गोरिदम एक डायनामिक प्रोग्रामिंग एल्गोरिदम है जिसका उपयोग किसी भी शीर्ष के सबसे छोटे पथ को खोजने के लिए किया जाता है जिसे एक शीर्ष से प्रारंभिक शीर्ष के रूप में माना जाता है। यह एल्गोरिदम पुनरावृत्त विधि का पालन करता है और लगातार सबसे छोटा पथ खोजने का प्रयास करता है। बेलमैन-फोर्ड एल्