মান ল করুন একটি বাইনারি ম্যাট্রিক্স, আমাদের ম্যাট্রিক্সে দ্বীপের সংখ্যা খুঁজে বের করতে হবে। এখানে ১ হল ল্যান্ড এবং ০ হল ওয়াটার, তাই একটি দ্বীপ হল ১-দের একটি গ্রুপ যারা পাশাপাশি আছে এবং যাদের পেরিমিটার জল দ্বারা ঘিরা। নেইবর শুধু হরিজন্টাল বা ভার্টিকেল হতে পারে, ডায়াগোনাল নয়।
যদি ইনপুট হয়:
| 1 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 |
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 0 | 1 |
তবে আউটপুট হবে ৪।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:
- একটি explore() ফাংশন সংজ্ঞায়িত করুন। এটি row, col, matrix গ্রহণ করবে।
- যদি row, col ম্যাট্রিক্সের রেঞ্জে না থাকে বা matrix[row][col] == 0, তবে ফেরত দিন।
- matrix[row][col] := 0
- explore(row+1, col, matrix), explore(row-1, col, matrix), explore(row, col+1, matrix), explore(row, col-1, matrix) কল করুন।
- মূল মেথড থেকে: যদি matrix null হয়, ০ ফেরত দিন। islands := 0। row কে ০ থেকে ম্যাট্রিক্সের সারি সংখ্যা পর্যন্ত, col কে ০ থেকে কলাম সংখ্যা পর্যন্ত লুপ চালান: যদি matrix[row][col] == 1, islands := islands + 1, explore(row, col, matrix) কল করুন। islands ফেরত দিন।
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:
উদাহরণ
class Solution: def explore(self, row, col, matrix): if ( row < 0 or col < 0 or row > len(matrix) - 1 or col > len (matrix[0]) - 1 or matrix[row][col] == 0): return matrix[row][col] = 0 self.explore(row + 1, col, matrix) self.explore(row - 1, col, matrix) self.explore(row, col + 1, matrix) self.explore(row, col - 1, matrix) def solve(self, matrix): if not matrix: return 0 islands = 0 for row in range(len(matrix)): for col in range(len(matrix[0])): if matrix[row][col] == 1: islands += 1 self.explore(row, col, matrix) return islands ob = Solution() matrix = [ [1, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 1, 1, 0, 0], [0, 0, 0, 0, 0], [1, 1, 0, 1, 1], [1, 1, 1, 0, 1] ] print(ob.solve(matrix))
ইনপুট
[ [1, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 1, 1, 0, 0], [0, 0, 0, 0, 0], [1, 1, 0, 1, 1], [1, 1, 1, 0, 1] ]
আউটপুট
4