মান ল করুন একটি ২D গ্রিড যাতে "r", "g", "b" রং স্ট্রিং হিসেবে থাকে। row r, column 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']]