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

পাইথনে বাইনারি ম্যাট্রিক্সে টপ-লেফট থেকে বটম-রাইটে পৌঁছানোর পথের সংখ্যা গণনা করার প্রোগ্রাম

একটি N x M বাইনারি ম্যাট্রিক্স দেওয়া আছে (০ = খালি সেল, ১ = ব্লকড সেল)। টপ-লেফট কোণা (০,০) থেকে শুরু করে বটম-রাইট কোণায় পৌঁছাতে কতটি পথ আছে সেটি বের করতে হবে। শুধু ডাউন এবং রাইট মুভ করা যাবে। উত্তর বড় হলে 10^9+7 দিয়ে মড করুন।

উদাহরণস্বরূপ,

matrix = [
  [0, 0, 1],
  [0, 0, 0],
  [1, 1, 0]
]

আউটপুট ২, কারণ দুটি পথ: Right, Down, Right, Down এবং Down, Right, Right, Down।

সমাধানের পদ্ধতি (ডাইনামিক প্রোগ্রামিং)

  1. dp = ম্যাট্রিক্স আকারের ২D অ্যারে, সব ০।
  2. dp[0][0] = 1।
  3. প্রথম কলাম: i=1..n-1, যদি matrix[i][0]==1 ব্রেক, অন্যথায় dp[i][0]=1।
  4. প্রথম সারি: j=1..m-1, যদি matrix[0][j]==1 ব্রেক, অন্যথায় dp[0][j]=1।
  5. বাকি সেল: i=1..n-1, j=1..m-1:
    • যদি matrix[i][j]==1, dp[i][j]=0।
    • অন্যথায় dp[i][j] = dp[i-1][j] + dp[i][j-1]।
  6. dp[-1][-1] রিটার্ন করুন।

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

class Solution:
    def solve(self, matrix):
        dp = [[0]*len(matrix[0]) for _ in range(len(matrix))]
        dp[0][0] = 1
        for i in range(1, len(matrix)):
            if matrix[i][0] == 1:
                break
            else:
                dp[i][0] = 1
        for j in range(1, len(matrix[0])):
            if matrix[0][j] == 1:
                break
            else:
                dp[0][j] = 1
        for i in range(1, len(matrix)):
            for j in range(1, len(matrix[0])):
                if matrix[i][j] == 1:
                    dp[i][j] = 0
                else:
                    dp[i][j] = dp[i-1][j] + dp[i][j-1]
        return dp[-1][-1]

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

ইনপুট

matrix = [[0,0,1],[0,0,0],[1,1,0]]

আউটপুট

2
  1. পাইথনে সর্টেড ম্যাট্রিক্স থেকে n-তম সবচেয়ে ছোট সংখ্যা বের করার প্রোগ্রাম

  2. পাইথনে সিম্বল अरেঞ্জ করে টার্গেট পাওয়ার উপায়ের সংখ্যা বের করার প্রোগ্রাম

  3. পাইথনে মেজ গ্রিডে টপ-লেফট থেকে বটম-রাইটে যাওয়ার ন্যূনতম পথ (BFS)

  4. পাইথনে এনকোডেড মেসেজ ডিকোড করার উপায়ের সংখ্যা খুঁজে বের করার প্রোগ্রাম