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

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


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

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

कुछ बाधाएं हैं:

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

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

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

एल्गोरिदम

बीएफएस (वर्ट, स्टार्ट, सिंक)

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

आउटपुट - सही है जब सिंक का दौरा किया जाता है।

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

fordFulkerson(लंबवत, स्रोत, सिंक)

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

आउटपुट - प्रारंभ से डूबने तक अधिकतम प्रवाह।

एक अवशिष्ट ग्राफ बनाना शुरू करें और उसमें दिए गए ग्राफ को कॉपी करें जबकि bfs (वर्ट, सोर्स, सिंक) सही है, पाथफ्लो करें:=∞ वी:=सिंक वर्टेक्स जबकि वी वर्टेक्स शुरू करें, क्या यू:=वी पाथफ्लो का पूर्ववर्ती :=न्यूनतम पथ प्रवाह और अवशिष्टग्राफ [यू, वी] वी:=वी के पूर्ववर्ती वी किया वी:=सिंक वर्टेक्स जबकि वी वर्टेक्स शुरू करें, क्या आप:=वी अवशिष्टग्राफ के पूर्ववर्ती [यू, वी]:=अवशिष्टग्राफ [यू, वी ] - पाथफ्लो रेसिडुअलग्राफ [वी, यू]:=रेसिडुअलग्राफ [वी, यू] - पाथफ्लो वी:=वी किया हुआ माफ्लो का पूर्ववर्ती:=मैक्सफ्लो + पाथफ्लो किया गया रिटर्न मैक्सफ्लोएंड

उदाहरण

#शामिल करें इंट स्टेट; // स्थिति इंट पूर्व; // पूर्ववर्ती} नोड; इंट न्यूनतम (इंट ए, इंट बी) {रिटर्न (ए <बी)? ए:बी;} इंट रेसग्राफ [नोड] [नोड]; / * इंट ग्राफ [नोड] [नोड] ={ { 0, 16, 13, 0, 0, 0}, {0, 0, 10, 12, 0, 0}, {0, 4, 0, 0, 14, 0}, {0, 0, 9, 0, 0, 20}, {0, 0, 0, 7, 0, 4}, {0, 0, 0, 0, 0, 0}}; */इंट ग्राफ [नोड] [नोड] ={{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}}; int bfs (नोड *वर्ट, नोड स्टार्ट, नोड सिंक) {नोड यू; इंट आई, जे; कतार <नोड> कतार; for(i =0; i 0 &&vert[i].state ==0) { que.push(vert[i]); वर्ट [i] .pred =u.val; लंबवत [i]। राज्य =1; } } } वापसी (लंबवत [सिंक। वैल]। राज्य ==1);} int fordFulkerson (नोड * लंबवत, नोड स्रोत, नोड सिंक) { int maxFlow =0; इंट यू, वी; for(int i =0; i 

आउटपुट

अधिकतम प्रवाह है:19

  1. बेलमैन-फोर्ड एल्गोरिथम फॉर शॉर्टेस्ट पाथ्स

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

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

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

  1. सी ++ में बेलमैन फोर्ड एल्गोरिदम?

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