Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में शुरू से अंत तक लागत k के साथ पथों की संख्या गिनने का कार्यक्रम

मान लीजिए कि हमारे पास 2d बाइनरी मैट्रिक्स है और दूसरा मान k है। अब टॉप-लेफ्ट सेल से शुरू करते हुए हमें बॉटम राइट सेल में जाना होगा। एक कदम में, हम केवल नीचे या दाएं जा सकते हैं। अब पथ का स्कोर पथ पर कोशिकाओं के मानों का योग है। हमें स्कोर k के साथ प्रारंभ सेल से अंत सेल तक पथों की संख्या ज्ञात करनी है। यदि बड़े संभावित तरीके हैं तो परिणाम मोड 10^9+7 लौटाएं।

तो, अगर इनपुट पसंद है

0 0 1
1 0 1
0 1 0

K =2, तो आउटपुट 4 होगा, क्योंकि स्कोर 2 वाले पथ हैं [R,R,D,D], [D,R,R,D], [D,D,R,R], [D ,R,D,R] यहाँ D नीचे है और R सही है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • deno :=10^9 + 7

  • एम:=मैट्रिक्स की पंक्ति गणना, एन:=मैट्रिक्स की कॉलम गणना

  • फ़ंक्शन को परिभाषित करें dfs() । इसमें i, j, pts लगेंगे

  • अगर मैं>=मी या जे>=n, तो

    • वापसी 0

  • अंक :=अंक + मैट्रिक्स[i, j]

  • अगर मैं एम -1 के समान हूं और जे एन -1 के समान है, तो

    • 1 लौटाएं जब अंक k के समान हों अन्यथा 0

  • वापसी dfs (i + 1, j, pts) + dfs (i, j + 1, pts)

  • मुख्य विधि से निम्न कार्य करें -

  • वापसी dfs(0, 0, 0) मॉड डेनो

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

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. पायथन में पहले से अंतिम नोड तक प्रतिबंधित पथों की संख्या खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक अप्रत्यक्ष भारित जुड़ा हुआ ग्राफ है। ग्राफ में n नोड्स होते हैं और उन्हें 1 से n तक लेबल किया जाता है। प्रारंभ से अंत तक का पथ [z0, z1, z2, ..., zk] जैसे नोड्स का एक क्रम है, यहां z0 प्रारंभ नोड है और zk अंत नोड है और zi और zi+1 के बीच एक किनारा है जहां 0 <=मैं dist(zi+1)

  1. पायथन में दिए गए किनारों को शामिल करने वाले अद्वितीय पथों की संख्या की गणना करने का कार्यक्रम

    मान लीजिए कि हमारे पास (u, v) के रूप में किनारों की एक सूची है और ये एक पेड़ का प्रतिनिधित्व कर रहे हैं। प्रत्येक किनारे के लिए हमें इनपुट में दिए गए क्रम में उसी क्रम में अद्वितीय पथों की कुल संख्या ज्ञात करनी होगी जिसमें उक्त किनारे शामिल हैं। इसलिए, यदि इनपुट किनारों की तरह है =[[0, 1],[0, 2],[1

  1. पथों की संख्या गिनने का कार्यक्रम जिसका योग अजगर में k है

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है और दूसरा मान k है, तो हमें उप-चाइल्ड पथों के लिए अद्वितीय नोड की संख्या ज्ञात करनी होगी, जो k के बराबर है। तो, अगर इनपुट पसंद है और k =5, तो आउटपुट 2 होगा, क्योंकि पथ [2, 3] और [1, 4] हैं। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - गिनती :=एक मानच