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

पायथन में नेटवर्क में संदेशों तक पहुंचने में कितना समय लगेगा, यह जानने के लिए कार्यक्रम

मान लीजिए कि हमारे पास एक संख्या और किनारों की एक सूची है। ये n अलग-अलग नोड्स 0 से N के रूप में लेबल किए गए हैं। ये नोड्स एक नेटवर्क बना रहे हैं। प्रत्येक किनारा एक अप्रत्यक्ष ग्राफ के रूप (ए, बी, टी) में है, यह दर्शाता है कि अगर हम ए से बी या बी से ए को संदेश भेजने का प्रयास करते हैं, तो इसमें टी समय लगेगा। जब कोई नोड संदेश प्राप्त करता है, तो यह तुरंत संदेश को पड़ोसी नोड पर बाढ़ कर देता है। यदि सभी नोड्स जुड़े हुए हैं, तो हमें यह पता लगाना होगा कि प्रत्येक नोड को नोड 0 से शुरू होने वाले संदेश को प्राप्त करने में कितना समय लगेगा।

इसलिए, यदि इनपुट n =3 किनारों =[[0, 1, 3], [1, 2, 4], [2, 3, 2]] जैसा है, तो आउटपुट 9 होगा, जैसा कि चौथा नोड ( नोड संख्या 3) 0 -> 1 -> 2 -> 3 से संदेश प्राप्त करता है जिसमें 3 + 4 + 2 =9 राशि समय लगता है।

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

एक फ़ंक्शन को परिभाषित करें build_graph() । इसमें किनारे लगेंगे

  • ग्राफ:=एक खाली नक्शा
  • किनारों में सेट प्रत्येक (src, dest, t) के लिए, करें
    • ग्राफ़ में (dest, t) डालें[src]
    • ग्राफ़ में (src, t) डालें[dest]
  • रिटर्न ग्राफ़
  • मुख्य विधि से निम्न कार्य करें -
  • ग्राफ:=build_graph(किनारों)
  • विज़िट किया :=एक नया सेट
  • ढेर:=जोड़ी के साथ एक नया ढेर बनाएं (0, 0)
  • जबकि ढेर खाली नहीं है, करें
    • (current_total_time, node) :=हीप का शीर्ष तत्व, और इसे हीप से हटा दें
    • नोड को विज़िट किया गया के रूप में चिह्नित करें
    • यदि विज़िट किए गए नोड्स की संख्या (n + 1) के समान है, तो
      • वर्तमान_कुल_समय लौटाएं
    • ग्राफ में प्रत्येक जोड़ी (एनईआई, समय) के लिए[नोड], करते हैं
      • अगर नी का दौरा नहीं किया, तो
        • जोड़ी (current_total_time + time, nei) को ढेर में डालें

उदाहरण (पायथन)

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

import heapq
from collections import defaultdict
class Solution:
   def solve(self, n, edges):
      graph = self.build_graph(edges)  
      visited = set()
      heap = [(0, 0)]
      while heap:
         current_total_time, node = heapq.heappop(heap)
         visited.add(node)  
         if len(visited) == (n + 1):
            return current_total_time
         for nei, time in graph[node]:
            if nei not in visited:
               heapq.heappush(heap, (current_total_time + time, nei))
   def build_graph(self, edges):
      graph = defaultdict(set)
      for src, dest, t in edges:
         graph[src].add((dest, t))
         graph[dest].add((src, t))
      return graph
ob = Solution()
n = 3
edges = [[0, 1, 3],[1, 2, 4],[2, 3, 2]]
print(ob.solve(n, edges))

इनपुट

3, [[0, 1, 3],[1, 2, 4],[2, 3, 2]]

इनपुट

9

  1. कितने क्यूब्स काटे गए यह पता लगाने के लिए पायथन प्रोग्राम

    मान लीजिए, a, b, और c आयामों के कई घन हैं, और उनका उपयोग करके आयाम axbxc का एक नया बॉक्स बनाया जाता है। ए, बी, और सी जोड़ीदार सह-अभाज्य हैं; gcd(a, b) =gcd(b,c) =gcd(c, d) =1. हमें बॉक्स को एक ही स्लाइस से दो टुकड़ों में काटना है जैसा कि चित्र में दिखाया गया है। हमें यह पता लगाना है कि क्या डिब्बे क

  1. पायथन प्रोग्राम कैसे चलाएं?

    कोड लिखने के बाद, हमें आउटपुट को निष्पादित करने और प्राप्त करने के लिए कोड को चलाने की आवश्यकता होती है। प्रोग्राम चलाने पर, हम जांच सकते हैं कि कोड सही लिखा है या नहीं और वांछित आउटपुट देता है। पायथन प्रोग्राम चलाना काफी आसान काम है। आईडीएलई पर चलाएं IDLE पर पायथन प्रोग्राम चलाने के लिए, दिए गए च

  1. अजगर में सभी पेड़ों को जलाने में लगने वाले दिनों की संख्या का पता लगाने का कार्यक्रम

    मान लीजिए हमारे पास एक 2डी मैट्रिक्स है जो एक जंगल का प्रतिनिधित्व करता है जहां तीन प्रकार की कोशिकाएं हैं:0 खाली सेल 1 ट्री सेल 2 फायर सेल पर पेड़ हर दिन, एक पेड़ आग पकड़ता है जब एक आसन्न होता है (ऊपर, नीचे, बाएं, दाएं, नहीं विकर्ण) पेड़ में आग लगी है। हमें यह पता लगाना होगा कि प्रत्येक पेड़ में आग