কম্পিউটার টিউটোরিয়াল

পাইথনে ম্যাট্রিক্স থেকে বাইরে যাওয়া না যাওয়া দ্বীপের সংখ্যা বের করার প্রোগ্রাম

এক বাইনারি ম্যাট্রিক্স দেওয়া আছে যেখানে ১ = ভূমি এবং ০ = জল। যেকোনো ভূমি সেল থেকে উপরে, নিচে, বামে, ডানে (ডায়াগোনাল নয়) যেতে পারা যায়। ম্যাট্রিক্সের বাইরে বের হওয়া যাবে না। এমন কতগুলো ভূমি সেল আছে যেখান থেকে ম্যাট্রিক্সের বাইরে যাওয়া সম্ভব নয় তা বের করতে হবে।

সমস্যা উদাহরণ

ইনপুট ম্যাট্রিক্স:

0 0 0 1
0 1 1 0
0 1 1 0
0 0 0 1

আউটপুট: 4

ব্যাখ্যা: মাঝপথের ৪টি ভূমি সেল থেকে বাইরে যাওয়া যায় না। কোণাগুলোর ১গুলোর কাছ থেকে বাইরে যাওয়া যায়।

সমাধানের পদ্ধতি (BFS ফ্লড ফিল)

  1. সীমানার সব ভূমি সেলগুলো একটি কিউ (q) তে সংগ্রহ করুন
  2. সীমানার ভূমি সেলগুলো ০ করে দিন (ভিজিটেড চিহ্নিত)
  3. BFS চালান: কিউ থেকে প্রতিটি সেলের জন্য ৪ দিক চেক করুন, যদি নতুন ভূমি সেল পাওয়া যায় তবে সেটাকে ০ করে কিউতে যোগ করুন
  4. শেষে ম্যাট্রিক্সের সব সেলের যোগফল রিটার্ন করুন (যেটি অবশিষ্ট ভূমি সেলের সংখ্যা)

পাইথন কোড

def solve(matrix):
    # সীমানার ভূমি সেলগুলো কিউতে সংগ্রহ
    q = [(i, j) for i in range(len(matrix)) 
              for j in range(len(matrix[i])) 
              if matrix[i][j] and (i == 0 or i == len(matrix) - 1 or j == 0 or j == len(matrix[i]) - 1)]
    idx = 0
    # সীমানার সেলগুলো ০ করে দিন
    for x, y in q:
        matrix[x][y] = 0
    # BFS
    while idx < len(q):
        x, y = q[idx]
        for dx, dy in [(-1, 0), (0, -1), (0, 1), (1, 0)]:
            nx, ny = x + dx, y + dy
            if 0 <= nx < len(matrix) and 0 <= ny < len(matrix[nx]) and matrix[nx][ny]:
                matrix[nx][ny] = 0
                q.append((nx, ny))
        idx += 1
    # অবশিষ্ট ভূমি সেলের সংখ্যা
    return sum(sum(row) for row in matrix)

matrix = [
    [0, 0, 0, 1],
    [0, 1, 1, 0],
    [0, 1, 1, 0],
    [0, 0, 0, 1]
]
print(solve(matrix))  # আউটপুট: 4

টেস্ট কেস

ইনপুট: [[0, 0, 0, 1], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 1]]
আউটপুট: 4

  1. পাইথনে প্রথম থেকে শেষ নোড পর্যন্ত রেস্ট্রিক্টেড পথের সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে সর্টেড তালিকা থেকে k-তম অনুপস্থিত সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে 'a' কে 'a' বা 'b' এবং 'b' কে 'b' রেখে বানানো সম্ভাব্য স্ট্রিং সংখ্যা বের করার প্রোগ্রাম

  4. পাইথনে লিস্ট থেকে সর্বোচ্চ সংখ্যা বের করা