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

पायथन में न्यूनतम मान वाले शीर्ष से अधिकतम मान वाले शीर्ष तक न्यूनतम लागत पथ ज्ञात करने का प्रोग्राम


मान लीजिए हमें एक अनिर्देशित, भारित ग्राफ दिया गया है और हमें एक विशेष नोड से दूसरे विशेष नोड तक न्यूनतम संभव यात्रा लागत वाला पथ ढूंढना है। यात्रा लागत की गणना निम्न प्रकार से की जाती है: मान लीजिए शीर्ष A से शीर्ष C तक A→B→C जैसा पथ है। A से B तक यात्रा की लागत 10 है और B से C तक यात्रा की लागत 20 है। A से C तक यात्रा की लागत (A से B तक यात्रा की लागत) + (B से C तक यात्रा की लागत और नोड B तक संचयी यात्रा लागत का अंतर) होगी। तो यह 10 + (20 - 10) = 20 होगा। हमें दिए गए ग्राफ में पहले नोड से अंतिम नोड (सबसे कम मान वाले नोड से सबसे अधिक मान वाले नोड) तक न्यूनतम संभव यात्रा मान ज्ञात करने हैं।

इसलिए, यदि इनपुट इस तरह है

पायथन में न्यूनतम मान वाले शीर्ष से अधिकतम मान वाले शीर्ष तक न्यूनतम लागत पथ ज्ञात करने का प्रोग्राम

तो आउटपुट 15 होगा।

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

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

  • adjList := खाली सूचियों वाला एक नया मैप
  • edges में प्रत्येक item के लिए, करें
    • u := item[0]
    • v := item[1]
    • w := item[2]
    • जोड़ी (w,v) को adjList[u] के अंत में डालें
    • जोड़ी (w,u) को adjList[v] के अंत में डालें
  • q := एक नया हीप
  • v_list := एक नया सेट
  • (0,1) को q के अंत में डालें
  • flag := True
  • जब तक q खाली नहीं है, करें
    • c := q से सबसे छोटा आइटम निकालें
    • यदि c[1] v_list में मौजूद है, तो
      • अगली पुनरावृत्ति के लिए जाएं
    • c[1] को v_list में जोड़ें
    • यदि c[1] n के समान है, तो
      • flag := False
      • c[0] वापस करें
    • adjList[c[1]] में प्रत्येक u के लिए, करें
      • यदि u[1] v_list में मौजूद नहीं है, तो
        • out := u[0], c[0], u[1] का अधिकतम
        • out को हीप q में डालें
  • यदि flag True है तो
    • -1 वापस करें

उदाहरण

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

from collections import defaultdict
import heapq

def solve(n, edges):
    adjList = defaultdict(list)
    for item in edges:
        u, v, w = map(int, item)
        adjList[u].append((w, v))
        adjList[v].append((w, u))
    q = []
    v_list = set()
    q.append((0, 1))
    flag = True
    while q:
        c = heapq.heappop(q)
        if c[1] in v_list:
            continue
        v_list.add(c[1])
        if c[1] == n:
            flag = False
            return c[0]
        for u in adjList[c[1]]:
            if u[1] not in v_list:
                out = (max(u[0], c[0]), u[1])
                heapq.heappush(q, out)
    if flag:
        return -1

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

इनपुट

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

आउटपुट

15
  1. पायथन में एक भारित अविकल्पित ग्राफ में एक शीर्ष के लिए कम लागत वाला पथ खोजने का प्रोग्राम पायथन में एक भारित अविकल्पित ग्राफ में एक शीर्ष के लिए कम लागत वाला पथ खोजने का प्रोग्राम

    मान लीजिए हमें एक भारित, अविकल्पित ग्राफ दिया गया है। हमें एक फ़ंक्शन query लागू करना है जो दो शीर्षों और एक लागत limit को इनपुट के रूप में लेता है और जांचता है कि क्या दी गई लागत से कम लागत वाला पथ मौजूद है। यदि ऐसा पथ मौजूद है तो हम true लौटाते हैं, अन्यथा false।उदाहरण के लिए, यदि इनपुट ग्राफ है:औ

  1. पायथन में ग्राफ के सभी शीर्षों के बीच न्यूनतम लागत का योग ज्ञात करने का प्रोग्राम पायथन में ग्राफ के सभी शीर्षों के बीच न्यूनतम लागत का योग ज्ञात करने का प्रोग्राम

    मान लीजिए n शीर्षों और m किनारों वाला एक भारित ग्राफ है। किनारों के भार 2 की घात में हैं। ग्राफ में किसी भी शीर्ष से किसी भी शीर्ष तक पहुंचा जा सकता है, और यात्रा की लागत ग्राफ में सभी किनारों के भार का योग होगी। हमें प्रत्येक शीर्ष जोड़ी के बीच न्यूनतम लागत का योग निर्धारित करना है। इसलिए, यदि इनप

  1. पायथन में ग्राफ में सबसे बड़े क्लिक का न्यूनतम आकार ज्ञात करने का प्रोग्राम पायथन में ग्राफ में सबसे बड़े क्लिक का न्यूनतम आकार ज्ञात करने का प्रोग्राम

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