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

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


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

उदाहरण के लिए, यदि इनपुट ग्राफ है:

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

और क्वेरी हैं (0, 2, 10), (3, 1, 30), (4, 3, 30)।

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

False True True

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

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

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

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

  • weights := ग्राफ में विभिन्न भारों की एक सूची।

  • connections := भारों के लिए कनेक्शन की एक सूची।

  • query() फ़ंक्शन परिभाषित करें जो p, q, limit लेता है:

    • index := weights में वह स्थिति जहां limit को क्रमबद्ध क्रम बनाए रखते हुए बाईं ओर डाला जा सकता है।

    • यदि index 0 के बराबर है, तो False लौटाएं।

    • यदि connections[index-1, p], connections[index-1, q] के बराबर है तो True लौटाएं।

उदाहरण

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

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. Python में ग्राफ में क्रिटिकल और स्यूडो-क्रिटिकल एज खोजने का प्रोग्राम Python में ग्राफ में क्रिटिकल और स्यूडो-क्रिटिकल एज खोजने का प्रोग्राम

    मान लीजिए, हमें एक ग्राफ दिया गया है जिसमें n वर्टेक्स हैं जो 0 से n-1 तक नंबर किए गए हैं। ग्राफ अनडायरेक्टेड है और प्रत्येक एज का एक वजन है। दिए गए ग्राफ से, हमें ग्राफ के MST में क्रिटिकल और स्यूडो-क्रिटिकल एज ढूंढने हैं। एक एज को क्रिटिकल एज कहा जाता है यदि उस एज को हटाने से MST का वजन बढ़ जाता

  1. पायथन प्रोग्राम: न्यूनतम लागत पथ पायथन प्रोग्राम: न्यूनतम लागत पथ

    इस लेख में हम दी गई समस्या के समाधान के बारे में जानेंगे। समस्या कथन हमें एक लागत मैट्रिक्स और एक स्थिति (m, n) दी गई है, हमें (0, 0) से (m, n) तक पहुंचने के लिए न्यूनतम लागत पथ की लागत ज्ञात करनी है। प्रत्येक सेल एक सेल से दूसरे सेल तक पार करने की लागत को दर्शाता है। उदाहरण # डायनामिक दृष्टिकोण R =