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

फ्लड फिल एल्गोरिथम - C++ में पेंट में फिल () कैसे लागू करें?

इस समस्या में, हमें 2-डी स्क्रीन का प्रतिनिधित्व करने वाला एक 2d सरणी दिया जाता है, स्क्रीन पर एक पिक्सेल के निर्देशांक रंग और रंग से भरे होते हैं। हमारा काम वर्तमान पिक्सेल और उस रंग वाले सभी आसन्न पिक्सेल को रंगने के लिए एक प्रोग्राम बनाना है।

पेंट में रंगना , हम एक रंग का चयन करेंगे और दिए गए पिक्सेल पर ब्रश से क्लिक करेंगे।

समस्या को समझने के लिए एक उदाहरण लेते हैं

इनपुट:सीन [] [] ={{डब्ल्यू, डब्ल्यू, बी, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू}, {डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू, बी, बी}, {डब्ल्यू , बी, बी, डब्ल्यू, डब्ल्यू, बी, डब्ल्यू, डब्ल्यू}, {डब्ल्यू, वाई, वाई, वाई, वाई, बी, डब्ल्यू, बी}, {बी, डब्ल्यू, डब्ल्यू, वाई, वाई, बी, डब्ल्यू, बी },{बी, डब्ल्यू, डब्ल्यू, वाई, वाई, वाई, वाई, बी}, {डब्ल्यू, बी, डब्ल्यू, डब्ल्यू, डब्ल्यू, वाई, डब्ल्यू, डब्ल्यू}, {डब्ल्यू, डब्ल्यू, बी, बी, डब्ल्यू, वाई , वाई, डब्ल्यू}}; एक्स =5, वाई =5, नया रंग =आर। आउटपुट:{{डब्ल्यू, डब्ल्यू, बी, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू}, {डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू, डब्ल्यू , डब्ल्यू, बी, बी}, {डब्ल्यू, बी, बी, डब्ल्यू, डब्ल्यू, बी, डब्ल्यू, डब्ल्यू}, {डब्ल्यू, आर, आर, आर, आर, बी, डब्ल्यू, बी}, {बी, डब्ल्यू, डब्ल्यू , आर, आर, बी, डब्ल्यू, बी}, {बी, डब्ल्यू, डब्ल्यू, आर, आर, आर, आर, बी}, {डब्ल्यू, बी, डब्ल्यू, डब्ल्यू, डब्ल्यू, आर, डब्ल्यू, डब्ल्यू}, {डब्ल्यू , डब्ल्यू, बी, बी, डब्ल्यू, आर, आर, डब्ल्यू}};

बाढ़ भरण एल्गोरिथम

इस एल्गोरिथम में, पिक्सेल पहले से चयनित पिछले रंग में होने पर नए रंग से भर जाएंगे। यदि पिछला रंग पिछला रंग नहीं है, तो वह पिक्सेल नहीं भरा जाएगा। एक पिक्सेल भरने के बाद, वह ऐसा करने के लिए अपने ऊपर, नीचे, बाएँ और दाएँ पिक्सेल की जाँच करेगा। यहां और जानें।

समाधान दृष्टिकोण

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

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#includeनेमस्पेस का उपयोग करना;#परिभाषित करें M 8#परिभाषित करें N 8void fillColorAdj(char Screen[][N], int x, int y, char oldColor, char color){ if (x <0 || एक्स>=एम || वाई <0 || वाई>=एन) वापसी; अगर (स्क्रीन [एक्स] [वाई]! =पुराना रंग) वापसी; अगर (स्क्रीन [x] [y] ==रंग) वापसी; स्क्रीन [एक्स] [वाई] =रंग; fillColorAdj (स्क्रीन, x+1, y, पुराना रंग, रंग); fillColorAdj (स्क्रीन, x-1, y, पुराना रंग, रंग); fillColorAdj (स्क्रीन, x, y+1, पुराना रंग, रंग); fillColorAdj (स्क्रीन, x, y-1, पुराना रंग, रंग);} शून्य भरण रंग (चार स्क्रीन [][एन], int x, int y, चार रंग) {चार पुराना रंग =स्क्रीन [x] [y]; अगर (पुराना रंग ==रंग) वापसी; fillColorAdj(स्क्रीन, x, y, OldColor, color);}int main(){ चार स्क्रीन[M][N] ={{'W', 'W', 'B', 'W', 'W', 'डब्ल्यू', 'डब्ल्यू', 'डब्ल्यू'}, {'डब्ल्यू', 'डब्ल्यू', 'डब्ल्यू', 'डब्ल्यू', 'डब्ल्यू', 'डब्ल्यू', 'बी', 'बी'}, {'डब्ल्यू ', 'बी', 'बी', 'डब्ल्यू', 'डब्ल्यू', 'बी', 'डब्ल्यू', 'डब्ल्यू'}, {'डब्ल्यू', 'वाई', 'वाई', 'वाई', 'वाई' ', 'बी', 'डब्ल्यू', 'बी'}, {'बी', 'डब्ल्यू', 'डब्ल्यू', 'वाई', 'वाई', 'बी', 'डब्ल्यू', 'बी'}, { 'बी', 'डब्ल्यू', 'डब्ल्यू', 'वाई', 'वाई', 'वाई', 'वाई', 'बी'}, {'डब्ल्यू', 'बी', 'डब्ल्यू', 'डब्ल्यू', 'डब्ल्यू', 'वाई', 'डब्ल्यू', 'डब्ल्यू'}, {'डब्ल्यू', 'डब्ल्यू', 'बी', 'बी', 'डब्ल्यू', 'वाई', 'वाई', 'डब्ल्यू'} ,}; इंट एक्स =5, वाई =5; चार रंग ='आर'; cout<<"प्रारंभिक स्क्रीन निर्देशांक हैं:\n"; for (int i=0; i 

आउटपुट

प्रारंभिक स्क्रीन कॉर्डिनेट हैं:डब्ल्यू डब्ल्यू बी डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू बी बी बी डब्ल्यू बी डब्ल्यू डब्ल्यू बी डब्ल्यू डब्ल्यू डब्ल्यू वाई वाई वाई बी डब्ल्यू डब्ल्यू बी डब्ल्यू डब्ल्यू डब्ल्यू वाई वाई बी डब्ल्यू बीबी डब्ल्यू वाई वाई वाई वाई बीडब्ल्यू बी डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू डब्ल्यू बी बी डब्ल्यू वाई वाई डब्ल्यू रंग के बाद स्क्रीन कॉर्डिनेट हैं:
  1. बाढ़ भरण एल्गोरिथ्म

    एक मैट्रिक्स दिया गया है; मैट्रिक्स एक स्क्रीन का प्रतिनिधित्व कर रहा है। स्क्रीन के प्रत्येक तत्व (i, j) को एक पिक्सेल के रूप में दर्शाया जाता है, उस पिक्सेल के रंग को अलग-अलग संख्याओं से चिह्नित किया जाता है। इस एल्गोरिथम में, पिक्सेल पहले से चयनित पिछले रंग में होने पर नए रंग से भर जाएंगे। यदि पि

  1. सी ग्राफिक्स का उपयोग करके बाढ़ भरण एल्गोरिदम

    अवधारणा किसी दिए गए आयत के संबंध में, हमारा कार्य बाढ़ भरण एल्गोरिथम लागू करके इस आयत को भरना है। इनपुट rectangle(left = 50, top = 50, right= 100, bottom = 100) floodFill( a = 55, b = 55, NewColor = 12, OldColor = 0) आउटपुट विधि // पिछले रंग OldColor को (a, b) पर और (a, b) के आसपास के सभी पि

  1. सी ++ प्रोग्राम फिशर-येट्स एल्गोरिथम को एरे शफलिंग के लिए लागू करने के लिए

    फिशर-येट्स एल्गोरिथम सरणी तत्वों का एक यादृच्छिक क्रमपरिवर्तन उत्पन्न करता है अर्थात यह एक सरणी के सभी तत्वों को बेतरतीब ढंग से फेरबदल करता है। सरणी के लिए सभी क्रमपरिवर्तन समान रूप से होने की संभावना है क्योंकि फिशर-येट्स एल्गोरिथम निष्पक्ष है। C++ में सरणी फेरबदल के लिए फिशर-येट्स एल्गोरिथम को ला