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

पायथन में पहले से अंतिम नोड तक प्रतिबंधित पथों की संख्या खोजने का कार्यक्रम

मान लीजिए कि हमारे पास एक अप्रत्यक्ष भारित जुड़ा हुआ ग्राफ है। ग्राफ में n नोड्स होते हैं और उन्हें 1 से n तक लेबल किया जाता है। प्रारंभ से अंत तक का पथ [z0, z1, z2, ..., zk] जैसे नोड्स का एक क्रम है, यहां z0 प्रारंभ नोड है और zk अंत नोड है और zi और zi+1 के बीच एक किनारा है जहां 0 <=मैं <=के-1. पथ की दूरी पथ के किनारों पर भार मानों का योग है। माना dist(x) नोड n और नोड x से सबसे छोटी दूरी को दर्शाता है। प्रतिबंधित पथ एक विशेष पथ है जो उस dist(zi)> dist(zi+1) को भी संतुष्ट करता है जहां 0 <=i <=k-1. इसलिए, हमें नोड 1 से नोड n तक प्रतिबंधित पथों की संख्या ज्ञात करनी होगी। अगर उत्तर बहुत बड़ा है तो उत्तर मॉड्यूलो 10^9 + 7 लौटाएं।

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

पायथन में पहले से अंतिम नोड तक प्रतिबंधित पथों की संख्या खोजने का कार्यक्रम

तो आउटपुट 3 होगा क्योंकि तीन प्रतिबंधित पथ हैं (1,2,5), (1,2,3,5), (1,3,5)।

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

  • ग्राफ़ :=दी गई किनारे सूची से बने ग्राफ़ की आसन्नता सूची

  • पथ :=आकार की एक सरणी (n+1) और 0

    . से भरा हुआ
  • पथ[n] :=1

  • dists :=आकार की एक सरणी (n+1) और -1 से भरी हुई

  • q :=एक कतार, और प्रारंभ में डालें (0, n)

  • जबकि q खाली नहीं है, करें

    • (जिला, नोड) :=q का अगला तत्व और इसे q से हटा दें

    • यदि डिस्ट [नोड] -1 के समान नहीं है, तो

      • अगले पुनरावृत्ति के लिए जाएं

    • डिस्ट [नोड] :=जिला

    • ग्राफ के प्रत्येक आसन्न नोड वी और वजन डब्ल्यू के लिए [नोड], करें

      • अगर dists[v] -1 के समान है, तो

        • q में डालें (dist + w, v) q

      • अन्यथा जब डिस्ट[v] <डिस्ट्स[नोड], तब

        • पथ [नोड]:=पथ [नोड] + पथ [v]

    • अगर नोड 1 के समान है, तो

      • वापसी पथ [नोड] मॉड 10^9+7

  • वापसी 0

उदाहरण

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

from collections import defaultdict
from heapq import heappop, heappush
def solve(n, edges):
   graph = defaultdict(dict)
   for u, v, w in edges:
      graph[u][v] = w
      graph[v][u] = w

   paths = [0] * (n+1)
   paths[n] = 1
   dists = [-1] * (n+1)
   q = [(0, n)]

   while q:
      dist, node = heappop(q)
      if dists[node] != -1:
         continue

      dists[node] = dist
      for v, w in graph[node].items():
         if dists[v] == -1:
            heappush(q, (dist + w, v))
         elif dists[v] < dists[node]:
            paths[node] += paths[v]

      if node == 1:
         return paths[node] % (10**9 + 7)

   return 0

n = 5
edges = [(1,2,3),(1,3,3),(2,3,1),(1,4,2),(5,2,2),(3,5,1),(5,4,10)]
print(solve(n, edges))

इनपुट

5,[(1,2,3),(1,3,3),(2,3,1),(1,4,2),(5,2,2),(3,5,1),(5,4,10)]

आउटपुट

3

  1. पायथन में लिंक की गई सूची के K-वें अंतिम नोड को खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक एकल लिंक की गई सूची है, हमें kth अंतिम नोड (0-अनुक्रमित) का मान ज्ञात करना है। हमें इसे सिंगल पास में हल करना होगा। इसलिए, यदि इनपुट नोड =[5,4,6,3,4,7], के =2 जैसा है, तो आउटपुट 3 होगा, क्योंकि दूसरे अंतिम (इंडेक्स 3) नोड का मान 3 है। इसे हल करने के लिए, हम इन चरणों का पा

  1. एक सूची में सबसे बड़ी संख्या खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन दी गई सूची इनपुट, हमें दी गई सूची में सबसे बड़ी संख्या खोजने की जरूरत है। यहां हम दो दृष्टिकोणों पर चर्चा करेंगे सॉर्टिंग तकनीकों का उपयोग करना अंतर्निहित अधिकतम() फ़ंक्शन का उपयोग करना दृष्टिक

  1. पात्रों की एक धारा से पहला गैर-दोहराए जाने वाले चरित्र को खोजने के लिए पायथन कार्यक्रम?

    इस खंड में हम वर्णों की एक स्ट्रिंग या धारा से पहला अद्वितीय या गैर-दोहराए जाने वाले चरित्र को खोजने जा रहे हैं। इस समस्या को हल करने के कई तरीके हैं। हम पात्रों की एक ही धारा के लिए दो अलग-अलग प्रोग्राम बनाने का प्रयास करेंगे। विधि 1:फ़ंक्शन का उपयोग करना def firstNonRepeatingChar(str1):   &nb