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

পাইথনে বাইনারি ম্যাট্রিক্স-এ সর্বোচ্চ পথ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

একটি বাইনারি ম্যাট্রিক্স দেওয়া আছে যেখানে 0 = খালি সেল, 1 = দেয়াল। প্রথম সারি থেকে কোনো খালি সেল থেকে শুরু করে শেষ সারির কোনো খালি সেলে যেতে হবে। বাম, ডান, নিচে যাওয়া যাবে। প্রতিটি সেল hoogstens একবার দেখতে হবে। সবচেয়ে লম্বা পথের দৈর্ঘ্য বের করুন। সম্ভব না হলে 0 রিটার্ন করুন।

উদাহরণ:

0 0 0 0
0 0 0 1
0 0 0 0
আউটপুট: 10 (পথ: (0,3)→(0,2)→(0,1)→(0,0)→(1,0)→(1,1)→(1,2)→(2,2)→(2,1)→(2,0))

সমাধানের পদ্ধতি

ডাইনামিক প্রোগ্রামিং (DP) এবং সারি-ভিত্তিক প্রক্রিয়া। প্রতিটি সারি için তিনটি অ্যারে রক্ষা করা হয়:

  • dp[j]: আগের সারি থেকে সেল (i-1, j) এ পৌঁছানোর সর্বোচ্চ পথ দৈর্ঘ্য।
  • ndp[j]: বাম থেকে ডান স্ক্যান করে বর্তমান সারির সর্বোচ্চ পথ।
  • ndp2[j]: ডান থেকে বাম স্ক্যান করে বর্তমান সারির সর্বোচ্চ পথ।

পাইথন কোড

def solve(matrix):
    N = len(matrix)
    M = len(matrix[0])
    dp = [-1 for _ in matrix[0]]
    
    for i in range(N):
        ndp = [-1 for _ in matrix[0]]
        ndp2 = [-1 for _ in matrix[0]]
        
        # নিচে যাওয়া (আগের সারি থেকে)
        for j in range(M):
            if matrix[i][j] != 1 and (i == 0 or dp[j] > -1):
                ndp[j] = dp[j] + 1
                ndp2[j] = dp[j] + 1
        
        # বাম থেকে ডান যাওয়া
        for j in range(1, M):
            if matrix[i][j] != 1 and ndp[j-1] > -1:
                ndp[j] = max(ndp[j], ndp[j-1] + 1)
        
        # ডান থেকে বাম যাওয়া
        for j in range(M-2, -1, -1):
            if matrix[i][j] != 1 and ndp2[j+1] > -1:
                ndp2[j] = max(ndp2[j], ndp2[j+1] + 1)
                ndp[j] = max(ndp[j], ndp2[j])
        
        dp = ndp
    
    return max(dp) + 1

# টেস্ট
matrix = [
    [0, 0, 0, 0],
    [0, 0, 0, 1],
    [0, 0, 0, 0]
]
print(solve(matrix))  # আউটপুট: 10

সময় জটিলতা

O(N × M) - প্রতিটি সেল ধ্রুবক বার প্রক্রিয়া হয়।

  1. পাইথনে n-ary ট্রি-তে সর্বোচ্চ পথ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  2. পাইথনে DAG-এ নোড পুনরাবৃত্তি ছাড়া সর্বোচ্চ দৈর্ঘ্যের পাথ খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে বাইনারি ট্রির লংগেস্ট কনsekutিভ পথের দৈর্ঘ্য বের করার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রির সর্বোচ্চ অল্টারনেটিং পথের দৈর্ঘ্য বের করার প্রোগ্রাম