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

পাইথনে বাইনারি ম্যাট্রিক্সে সেফ ডিস্ট্যান্স ফ্যাক্টর k-এর সর্বোচ্চ মান বের করা

একটি বাইনারি ম্যাট্রিক্স দেওয়া আছে (০ = খালি, ১ = ব্যক্তি)। দুটি সেলের দূরত্ব = max(|x1-x2|, |y1-y2|) (চেবিশেভ দূরত্ব)। ম্যাট্রিক্স k-সেফ হবে যদি এমন একটি খালি সেল থাকে যেটার দূরত্ব সব ব্যক্তি থেকে এবং গ্রিডের সব প্রান্ত থেকে কমপক্ষে k। সর্বোচ্চ k বের করতে হবে।

উদাহরণ: ৫x৫ ম্যাট্রিক্স যেখানে মাঝপথে ব্যক্তি আছে → আউটপুট 1।

সমাধানের ধাপসমূহ (DP - Largest Square of 1s ইনভার্টেড ম্যাট্রিক্সে)

  1. ম্যাট্রিক্স ইনভার্ট করুন (০↔১)। এখন ১ = খালি সেল।

  2. DP দিয়ে প্রতিটি সেলে সবচেয়ে বড় বর্গের সাইজ বের করুন যেখানে সব সেল ১ (খালি)।

  3. dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1]) যদি A[i][j]==1।

  4. সর্বোচ্চ dp ভ্যালু = ans।

  5. রিটার্ন (ans + 1) // 2। (কারণ চেবিশেভ দূরত্বে বর্গের রেডিয়াস)।

পাইথন কোড উদাহরণ

class Solution:
    def solve(self, A):
        N = len(A)
        M = len(A[0])
        for i in range(N):
            for j in range(M):
                A[i][j] ^= 1
        ans = 0
        for i in range(N):
            for j in range(M):
                if i and j and A[i][j]:
                    A[i][j] = 1 + min(A[i-1][j], A[i][j-1], A[i-1][j-1])
                    ans = max(A[i][j], ans)
        return (ans + 1) // 2

ob = Solution()
matrix = [
    [0, 0, 0, 0, 0],
    [0, 1, 1, 1, 0],
    [0, 1, 0, 1, 0],
    [0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0],
]
print(ob.solve(matrix))

ইনপুট

[[0,0,0,0,0],[0,1,1,1,0],[0,1,0,1,0],[0,1,1,1,0],[0,0,0,0,0]]

আউটপুট

1
  1. পাইথনে k অপারেশন পর পর সর্বনিম্ন সম্ভাব্য সর্বোচ্চ মান বের করার প্রোগ্রাম

  2. পাইথনে ন্যাপস্যাক সমস্যায় একাধিক কপি নিয়ে সর্বোচ্চ মান খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে ২ডি ম্যাট্রিক্সে ডান ও নিচে চলা সীমাবদ্ধ রেখে সর্বোচ্চ কয়েন সংগ্রহ করার প্রোগ্রাম

  4. পাইথন প্রোগ্রাম ডিকশনারিতে দ্বিতীয় সর্বোচ্চ মান বের করা