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

পাইথনে নির্দিষ্ট খরচ বিশিষ্ট পথের সংখ্যা গণনার প্রোগ্রাম


ধরুন আমাদের একটি ২D বাইনারি ম্যাট্রিক্স এবং একটি মান k দেওয়া আছে। উপরের বাম কোণ থেকে শুরু করে নিচের ডান কোণে যেতে হবে। প্রতিটি ধাপে শুধু নিচে বা ডানে যাওয়া যাবে। একটি পথের স্কোর হল সেই পথে পড়া সেলগুলোর মানগুলোর যোগফল। স্কোর ঠিক k হওয়া পথগুলোর সংখ্যা বের করতে হবে। যদি সংখ্যা খুব বেশি হয়, তবে 10^9+7 দিয়ে ভাগশেষ ফেরত দিন।

উদাহরণস্বরূপ, ইনপুট ম্যাট্রিক্স:

001
101
010

K = 2 হলে আউটপুট হবে 4।

সমাধানের ধাপসমূহ

  • deno := 10^9 + 7
  • m, n := len(matrix), len(matrix[0])
  • dfs(i, j, pts) ফাংশন সংজ্ঞায়িত করুন:
    • যদি i >= m or j >= n, তবে 0 ফেরত দিন
    • pts += matrix[i][j]
    • যদি i == m-1 and j == n-1, তবে 1 if pts == k else 0 ফেরত দিন
    • dfs(i+1, j, pts) + dfs(i, j+1, pts) ফেরত দিন
  • মূল পদ্ধতিতে dfs(0, 0, 0) % deno ফেরত দিন

উদাহরণ

class Solution:
    def solve(self, matrix, k):
        m, n = len(matrix), len(matrix[0])
        def dfs(i=0, j=0, pts=0):
            if i >= m or j >= n:
                return 0
            pts += matrix[i][j]
            if i == m - 1 and j == n - 1:
                return int(pts == k)
            return dfs(i + 1, j, pts) + dfs(i, j + 1, pts)
        return dfs() % (10 ** 9 + 7)

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

ইনপুট

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

আউটপুট

4
  1. পাইথনে র‍েগুলার পলিগনে কালার্ড ভার্টেক্স থেকে আইসোসিলিস ট্রায়্যাঙ্গেল কাউন্ট করার প্রোগ্রাম

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

  3. পাইথনে দِيয়ে गये এজগুলো অন্তর্ভুক্ত করে অনন্য পথের সংখ্যা গণনার প্রোগ্রাম

  4. পাইথনে বাইনারি ট্রিতে যেসব পথের যোগফল k তাদের সংখ্যা গুনার প্রোগ্রাম