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

यह पता लगाने के लिए कार्यक्रम कि क्या अप्रत्यक्ष ग्राफ में एक शीर्ष का पायथन में कम लागत वाला पथ है

मान लीजिए, हमें एक भारित, अप्रत्यक्ष ग्राफ दिया गया है। हमें एक फ़ंक्शन क्वेरी को कार्यान्वित करना होगा जो इनपुट के रूप में दो शिखर और लागत 'सीमा' लेता है और जांचता है कि इनपुट के रूप में दी गई लागत से कम लागत पथ मौजूद है या नहीं। यदि कोई पथ मौजूद है या अन्यथा, हम सही लौटते हैं, तो हम झूठे लौटते हैं।

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

यह पता लगाने के लिए कार्यक्रम कि क्या अप्रत्यक्ष ग्राफ में एक शीर्ष का पायथन में कम लागत वाला पथ है

और प्रश्न हैं (0, 2, 10), (3, 1, 30), (4, 3, 30)।

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

False
True
True

पहली क्वेरी का परिणाम गलत है क्योंकि लागत 10 के शीर्ष 0 से 2 के बीच कोई पथ नहीं है।

दूसरी क्वेरी का परिणाम सही है क्योंकि लागत 10 के शीर्ष 3 से 1 के बीच एक पथ है, जो 30 से कम है।

तीसरी क्वेरी का परिणाम सही है क्योंकि लागत 30 के शीर्ष 4 से 3 के बीच एक पथ है, जो 30 के बराबर है।

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

  • वज़न :=ग्राफ़ में अलग-अलग वज़न वाली एक सूची

  • कनेक्शन :=वज़न के लिए कनेक्शन वाली सूची

  • फ़ंक्शन क्वेरी () को परिभाषित करें। यह p, q, सीमा लेगा

    • अनुक्रमणिका :=भार में स्थिति यहाँ सीमा को क्रमबद्ध क्रम को बनाए रखने के बाईं ओर डाला जा सकता है

    • यदि अनुक्रमणिका 0 के समान है, तो

      • झूठी वापसी

    • यदि कनेक्शन [इंडेक्स -1, पी] कनेक्शन के समान है [इंडेक्स -1, क्यू]

उदाहरण

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

import bisect
class Solution(object):

   def __init__(self, n, edgeList):
      def find(node):
         if parent[node]!=node:
            parent[node] = find(parent[node])
         return parent[node]

      def union(x,y):
         parent[find(y)] = find(x)
         return

      parent = {i:i for i in range(n)}
      edgeList.sort(key = lambda x:x[2])
      self.connections = []
      self.weights = []
      for index,(i,j,weight) in enumerate(edgeList):
         union(i,j)
         if index!=len(edgeList)-1 and weight == edgeList[index+1][2]:
            continue
         self.weights.append(weight)
         self.connections.append([find(i) for i in parent])


   def query(self, p, q, limit):
      index = bisect.bisect_left(self.weights,limit)
      if index==0:
         return False
      return self.connections[index-1][p] == self.connections[index-1][q]

ob = Solution(5, [[0, 1, 10], [0, 2, 20], [1, 4, 10], [0, 3, 10], [1, 2, 20], [2, 3, 10]])
print(ob.query(0, 2, 10))
print(ob.query(3, 1, 30))
print(ob.query(4, 3, 30))

इनपुट

ob = Solution(5, [[0, 1, 10], [0, 2, 20], [1, 4, 10], [0, 3, 10], [1, 2, 20], [2, 3, 10]])
print(ob.query(0, 2, 10))
print(ob.query(3, 1, 30))
print(ob.query(4, 3, 30))

आउटपुट

False
True
True

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

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

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

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

  1. न्यूनतम लागत पथ के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक लागत मैट्रिक्स और एक स्थिति (एम, एन) दी गई है, हमें (0, 0) से (एम, एन) तक पहुंचने के लिए न्यूनतम लागत पथ की लागत का पता लगाना होगा। प्रत्येक सेल एक सेल से दूसरे सेल में जाने की लागत का प्रतिनिधित्व करता है। आ