फोर्ड-फुलकर्सन एल्गोरिथम का उपयोग किसी दिए गए ग्राफ में प्रारंभ शीर्ष से सिंक शीर्ष तक अधिकतम प्रवाह का पता लगाने के लिए किया जाता है। इस ग्राफ में हर किनारे की क्षमता है। स्रोत और सिंक नाम के दो शीर्ष दिए गए हैं। स्रोत शीर्ष में सभी बाहरी किनारे हैं, कोई अंदरूनी किनारा नहीं है, और सिंक में सभी अंदरूनी किनारे होंगे और कोई बाहरी किनारा नहीं होगा।
कुछ बाधाएं हैं:
- किनारे पर प्रवाह उस ग्राफ़ की दी गई क्षमता से अधिक नहीं है।
- आवक प्रवाह और जावक प्रवाह भी स्रोत और सिंक को छोड़कर हर किनारे के लिए समान होगा।
इनपुट और आउटपुट
इनपुट:आसन्नता मैट्रिक्स: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; i0 &&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