एक मैट्रिक्स दिया गया है; मैट्रिक्स एक स्क्रीन का प्रतिनिधित्व कर रहा है। स्क्रीन के प्रत्येक तत्व (i, j) को एक पिक्सेल के रूप में दर्शाया जाता है, उस पिक्सेल के रंग को अलग-अलग संख्याओं से चिह्नित किया जाता है। इस एल्गोरिथम में, पिक्सेल पहले से चयनित पिछले रंग में होने पर नए रंग से भर जाएंगे। यदि पिछला रंग पिछला रंग नहीं है, तो वह पिक्सेल नहीं भरा जाएगा। एक पिक्सेल भरने के बाद, वह ऐसा करने के लिए अपने ऊपर, नीचे, बाएँ और दाएँ पिक्सेल की जाँच करेगा।
विचार वास्तव में सरल है, पहले, हम जांचते हैं कि चयनित स्थिति पिछले रंग से रंगीन है या नहीं, नहीं, एल्गोरिदम काम नहीं करेगा। अन्यथा, यह उस पिक्सेल को नए रंग से भर देगा और उसके चार पड़ोसियों के लिए फिर से आ जाएगा।
इनपुट और आउटपुट
इनपुट:स्क्रीन मैट्रिक्स:1 1 1 1 1 1 1 11 1 1 1 1 1 0 01 0 0 1 1 0 1 11 2 2 2 0 1 01 1 1 2 2 0 1 01 1 1 2 2 2 2 01 1 1 1 1 2 1 11 1 1 1 1 2 2 1 आउटपुट:बाढ़ भरने के बाद स्क्रीन मैट्रिक्स 1 1 1 1 1 1 1 11 1 1 1 1 1 0 01 0 1 1 0 1 11 3 3 3 0 1 01 1 1 3 3 0 1 01 1 1 3 3 3 3 01 1 1 1 1 3 1 11 1 1 1 1 3 3 1
एल्गोरिदम
fillScreen(x, y, prevColor, newColor)
इनपुट: (x,y) प्रारंभ, पिछले रंग और नए रंग के लिए समन्वयित करता है।
आउटपुट - यदि संभव हो तो रंग को पिछले से नए में बदलने के बाद स्क्रीन करें।
शुरू करें अगर (x, y) स्क्रीन रेंज में नहीं है, तो वापस लौटें यदि (x, y) का रंग prevColor, तो रिटर्न स्क्रीन [x, y] :=newColor fillScreen(x+1, y, prevColor, newColor) fillScreen(x-1, y, prevcolor, newColor) fillScreen(x, y+1, prevcolor, newcolor) fillScreen(x, y-1, prevcolor, newcolor)End
उदाहरण
#include#define M 8#define N 8 यूज़िंग नेमस्पेस एसटीडी;इंट स्क्रीन[एम][एन] ={//स्क्रीन डाइमेंशन और कलर्स {1, 1, 1, 1, 1, 1, 1 , 1}, {1, 1, 1, 1, 1, 1, 0, 0}, {1, 0, 0, 1, 1, 0, 1, 1}, {1, 2, 2, 2, 2 , 0, 1, 0}, {1, 1, 1, 2, 2, 0, 1, 0}, {1, 1, 1, 2, 2, 2, 2, 0}, {1, 1, 1 , 1, 1, 2, 1, 1}, {1, 1, 1, 1, 1, 2, 2, 1}}; शून्य भरणस्क्रीन (int x, int y, int prevcolor, int newcolor) {// बदलें (x, y) का पिछला रंग, नए रंग के साथ अगर (x <0 || x>=M || y <0 || y>=N) // जब बिंदु स्क्रीन रिटर्न से अधिक हो जाता है; अगर (स्क्रीन [x] [y]! =prevColor) // यदि बिंदु (x, y) में prevcolor नहीं है, तो कुछ भी वापस न करें; स्क्रीन [एक्स] [वाई] =नया रंग; // कलर फिलस्क्रीन अपडेट करें (x+1, y, prevColor, newColor); // (x, y) फिलस्क्रीन (x-1, y, prevColor, newColor) के अधिकार के लिए; // (x, y) fillScreen (x, y+1, prevColor, newColor) के बाईं ओर; // (x, y) फिलस्क्रीन (x, y-1, prevColor, newColor) के शीर्ष के लिए; // (x, y)} के नीचे के लिए बाढ़ भरें (int x, int y, int newColor) { int prevColor =स्क्रीन [x] [y]; // नया रंग भरने से पहले रंग लें (x, y, prevColor, newColor);}int main() {int x =4, y =4, newColor =3; cout <<"पिछली स्क्रीन:"< आउटपुट
<पूर्व>पिछली स्क्रीन1 1 1 1 1 1 1 11 1 1 1 1 0 01 0 0 1 1 0 1 11 2 2 2 2 0 1 01 1 1 2 2 0 1 01 1 1 2 2 2 2 01 1 1 1 1 2 1 11 1 1 1 1 2 2 1अपडेटेड स्क्रीन:1 1 1 1 1 1 11 1 1 1 1 1 0 01 0 1 1 0 1 11 3 3 3 3 0 1 01 1 1 3 3 0 1 01 1 1 3 3 3 3 01 1 1 1 1 3 1 11 1 1 1 1 3 3 1