मान लीजिए हमारे पास एक 2D ग्रिड है, जिसमें रंग स्ट्रिंग्स "r", "g", और "b" के रूप में हैं। हमें पंक्ति r, कॉलम c पर रंग target के साथ फ्लडफिल ऑपरेशन करना है। जैसा कि हम जानते हैं फ्लडफिल ऑपरेशन को उन सभी तत्वों को बदलना चाहिए जो grid[r,c] से जुड़े हैं (ऊपर/दाएं/नीचे/बाएं) और जिनका रंग grid[r,c] के समान है, उन्हें target के समान रंग से बदल देना चाहिए।
इसलिए, यदि इनपुट इस तरह है
| R | R | R |
| R | G | B |
| G | B | B |
तो आउटपुट होगा
| G | G | G |
| G | G | B |
| G | B | B |
क्योंकि grid[0,0] से जुड़े लाल सेल हरे ("g") से बदल दिए जाते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −
- एक नया सेट seen परिभाषित करें
- oldcolor := matrix[r, c]
- एक फ़ंक्शन dfs() परिभाषित करें। यह i, j लेगा
- यदि i और j मैट्रिक्स में हैं और (i, j) seen में नहीं है और matrix[i, j], oldcolor के समान है, तो
- (i, j) को seen में जोड़ें
- matrix[i, j] := target
- dfs(i + 1, j)
- dfs(i, j + 1)
- dfs(i, j - 1)
- dfs(i - 1, j)
- मुख्य विधि से, निम्नलिखित करें −
- dfs(r, c)
- matrix वापस करें
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −
उदाहरण
class Solution: def solve(self, matrix, r, c, target): def dfs(i, j): if ( i >= 0 and i < len(matrix) and j >= 0 and j < len(matrix[0]) and (i, j) not in seen and matrix[i][j] == oldcolor ): seen.add((i, j)) matrix[i][j] = target dfs(i + 1, j) dfs(i, j + 1) dfs(i, j - 1) dfs(i - 1, j) seen = set() oldcolor = matrix[r][c] dfs(r, c) return matrix ob = Solution() matrix = [ ["r", "r", "r"], ["r", "g", "b"], ["g", "b", "b"] ] r = 0 c = 0 target = "g" print(ob.solve(matrix, r, c, target))
इनपुट
matrix = [ ["r", "r", "r"], ["r", "g", "b"], ["g", "b", "b"] ] r = 0 c = 0 target = "g"
आउटपुट
[ ['g', 'g', 'g'], ['g', 'g', 'b'], ['g', 'b', 'b']]