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

न्यूनतम दंड (पायथन) वाले ग्राफ़ में दो शीर्षों के बीच पथ का पता लगाने का कार्यक्रम

मान लीजिए कि हमें एक अप्रत्यक्ष, भारित ग्राफ दिया गया है और नोड ए से नोड बी तक न्यूनतम संभव दंड के साथ पथ का पता लगाने के लिए कहा गया है। पथ का दंड पथ के सभी किनारों के भार का या बिटवाइज़ है। इसलिए, हमें ऐसे 'न्यूनतम दंड' पथ का पता लगाना चाहिए, और यदि दो नोड्स के बीच कोई पथ मौजूद नहीं है, तो हम -1 लौटाते हैं।

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

न्यूनतम दंड (पायथन) वाले ग्राफ़ में दो शीर्षों के बीच पथ का पता लगाने का कार्यक्रम

प्रारंभ (एस) =1, अंत (ई) =3; तो आउटपुट 15 होगा।

शीर्ष 1 और 3 के बीच दो पथ मौजूद हैं। इष्टतम पथ 1->2->3 है, पथ की लागत (10 या 5) =15 है।

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

  • एक फंक्शन हेल्पर () को परिभाषित करें। इसमें G, s, e
      . लगेगा
    • v :=एक नया सेट
    • c :=आकार n की एक नई सूची जिसे अनंत मान के साथ प्रारंभ किया गया है
    • ढेर:=जोड़ी युक्त एक नया ढेर (0, s)
    • ढेर का आकार> 0, करते समय
      • cst :=हीप से सबसे छोटी वस्तु को पॉप करें
      • cur :=ढेर से सबसे छोटी वस्तु को पॉप करें
      • c[cur] :=न्यूनतम (cst, c[cur])
      • अगर (cst, cur) v में मौजूद है, तो
        • अगले पुनरावृत्ति के लिए जाएं
      • यदि वक्र ई के समान है, तो
        • वापसी c[cur]
      • जोड़ी (cst, cur) को v में जोड़ें
      • प्रत्येक पड़ोसी के लिए, n_कॉस्ट जी में[cur], करें
        • मान ((n_cost OR cst), पड़ोसी) को ढेर करने के लिए पुश करें
    • वापसी c[e]
  • G :=[एक नई सूची जिसमें n + 1 भावनात्मक सूचियां हैं]
  • किनारों में प्रत्येक आइटम के लिए, करें
    • यू:=आइटम [0]
    • v:=आइटम[1]
    • w:=आइटम[2]
    • G[u] के अंत में जोड़ी (v, w) डालें
    • G[v] के अंत में जोड़ी (u, w) डालें
  • उत्तर:=सहायक(जी, एस, ई)
  • वापसी -1 यदि उत्तर inf के समान है अन्यथा उत्तर लौटाएं

उदाहरण

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

गणित आयात infdef सहायक (जी, एस, ई) से
import heapq
from math import inf

def helper(G, s, e):
    v = set()
    c = [inf] * len(G)
    heap = [(0, s)]
    while len(heap) > 0:
        cst, cur = heapq.heappop(heap)
        c[cur] = min(cst, c[cur])
        if (cst, cur) in v:
            continue
        if cur == e:
            return c[cur]
        v.add((cst, cur))
        for neighbor, n_cost in G[cur]:
            heapq.heappush(heap, (n_cost | cst, neighbor))
    return c[e]

def solve(n, edges, s, e):
    G = [[] for _ in range(n + 1)]
    for item in edges:
        u, v, w = map(int, item)
        G[u].append((v, w))
        G[v].append((u, w))
    ans = helper(G, s, e)
    return -1 if ans == inf else ans

print(solve(4, [(1, 2, 10), (2, 3, 5), (2, 4, 15), (1, 4, 20)], 1, 3))

इनपुट

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

आउटपुट

15

  1. ग्राफ़ में सबसे बड़े गुट के न्यूनतम आकार का पता लगाने का कार्यक्रम (पायथन)

    मान लीजिए कि हमें एक ग्राफ दिया गया है और ग्राफ में सबसे बड़े समूह का न्यूनतम आकार ज्ञात करने के लिए कहा गया है। ग्राफ़ का एक समूह एक ग्राफ़ का एक उपसमुच्चय होता है, जहाँ प्रत्येक शीर्ष जोड़े आसन्न होते हैं, अर्थात प्रत्येक जोड़े के बीच एक किनारा मौजूद होता है। एक ग्राफ में सबसे बड़ा गुट ढूँढना बहुप

  1. यह पता लगाने के लिए कार्यक्रम कि क्या पायथन में सभी के द्वारा ग्राफ़ को ट्रैवर्स किया जा सकता है

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्षों की संख्या 0 से n - 1 है। ग्राफ अप्रत्यक्ष है और प्रत्येक किनारे का वजन है। ग्राफ में तीन प्रकार के भार हो सकते हैं और प्रत्येक भार एक विशेष कार्य को दर्शाता है। दो लोग हैं जो ग्राफ को पार कर सकते हैं, अर्थात् जैक और केसी। जैक ग्राफ को पार कर सकता

  1. पायथन में एक ग्राफ में महत्वपूर्ण और छद्म-महत्वपूर्ण किनारों का पता लगाने का कार्यक्रम

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n शीर्षों की संख्या 0 से n -1 है। ग्राफ अप्रत्यक्ष है और प्रत्येक किनारे का वजन होता है। तो ग्राफ को देखते हुए, हमें ग्राफ एमएसटी में महत्वपूर्ण और छद्म-महत्वपूर्ण किनारों का पता लगाना होगा। एक किनारे को एक महत्वपूर्ण किनारा कहा जाता है यदि उस किनारे को हट