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

पायथन में न्यूनतम लागत वाले शहरों को जोड़ना


मान लीजिए कि 1 से N तक N शहरों की संख्या है। हमारे पास कनेक्शन हैं, जहां प्रत्येक कनेक्शन [i] [शहर 1, शहर 2, लागत] है, यह शहर 1 और शहर 2 को एक साथ जोड़ने की लागत का प्रतिनिधित्व करता है . हमें न्यूनतम लागत का पता लगाना होगा ताकि शहरों की प्रत्येक जोड़ी के लिए, कनेक्शन का एक मार्ग मौजूद हो (संभवतः लंबाई 1 का) जो उन दो शहरों को एक साथ जोड़ता है। लागत उपयोग की गई कनेक्शन लागतों का योग है। यदि कार्य असंभव है, तो -1 लौटें।

तो अगर ग्राफ इस तरह है -

पायथन में न्यूनतम लागत वाले शहरों को जोड़ना

फिर आउटपुट 6 होगा, किन्हीं दो शहरों को चुनने से सभी शहर जुड़ जाएंगे, इसलिए हम न्यूनतम 2, [1, 5]

चुनते हैं।

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

  • खोज () नामक विधि को परिभाषित करें, इसमें x लगेगा

  • अगर माता-पिता [x] -1 है, तो x लौटाएं

  • माता-पिता [x]:=ढूंढें (माता-पिता [x])

  • माता-पिता को लौटाएं[x]

  • यूनियन () नामक एक और विधि बनाएं, इसमें x और y लगेंगे

  • parent_x:=ढूंढें(x), parent_y:=ढूंढें(y)

  • अगर parent_x =parent_y, तो वापस आएं, नहीं तो पैरेंट[parent_y] :=parent_x

  • मुख्य विधि से, यह n और conn लेगा

  • माता-पिता:=आकार n की एक सरणी और इसे -1 से भरें, सेट करें:=n - 1, लागत:=0

  • c :=कॉन की क्रमबद्ध सूची, लागत के आधार पर इसे छाँटें

  • मैं :=0

  • जबकि मैं <सी की लंबाई और असंबद्ध 0 नहीं है

    • x :=c[i, 0] और y :=c[i, 1]

    • यदि खोज (x) खोज (y) के समान नहीं है, तो 1 से असंबद्ध घटाएं, c[i, 2] द्वारा लागत बढ़ाएं, और संघ (x, y) करें

    • 1 से बढ़ाएँ

  • वापसी लागत जब असंबद्ध 0 है, अन्यथा वापसी -1

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

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

class Solution(object):
   def find(self, x):
      if self.parent[x] == -1:
         return x
      self.parent[x] = self.find(self.parent[x])
      return self.parent[x]
   def union(self,x,y):
      parent_x = self.find(x)
      parent_y = self.find(y)
      if parent_x == parent_y:
         return
      self.parent[parent_y] = parent_x
   def minimumCost(self, n, connections):
      self.parent = [ -1 for i in range(n+1)]
      disjoint = n-1
      cost = 0
      c = sorted(connections,key=lambda v:v[2])
      i = 0
      while i<len(c) and disjoint:
         x = c[i][0]
         y = c[i][1]
         if self.find(x)!=self.find(y):
            disjoint-=1
            cost+=c[i][2]
            self.union(x,y)
            i+=1
         return cost if not disjoint else -1
ob = Solution()
print(ob.minimumCost(3, [[1,2,5], [1,3,6], [2,3,1]]))

इनपुट

3
[[1,2,5],[1,3,6],[2,3,1]]

आउटपुट

-1

  1. पायथन में सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास बिंदु (x, y) के रूप में कुछ बिंदुओं के साथ बिंदु नामक एक सरणी है। अब दो बिंदुओं (xi, yi) और (xj, yj) को जोड़ने की लागत उनके बीच मैनहट्टन दूरी है, सूत्र है |xi - xj| + |yi - yj|। हमें सभी बिंदुओं को जोड़ने के लिए न्यूनतम लागत का पता लगाना होगा। इसलिए, यदि इनपुट पॉइंट्स की तरह

  1. पायथन में एक बोर्ड को वर्गों में काटने की न्यूनतम लागत

    मान लीजिए हमारे पास लंबाई p और चौड़ाई q का एक बोर्ड है; हमें इस बोर्ड को p*q संख्या के वर्गों में तोड़ना है ताकि तोड़ने की लागत यथासंभव न्यूनतम हो। प्रत्येक किनारे के लिए काटने की लागत दी जाएगी। इसलिए, यदि इनपुट X_slice =[3,2,4,2,5], Y_slice =[5,2,3] जैसा है तो आउटपुट 65 . होगा इसे हल करने के ल

  1. पायथन में लीफ वैल्यू से न्यूनतम लागत का पेड़

    मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी है, सभी बाइनरी पेड़ों पर विचार करें जैसे कि - प्रत्येक नोड में 0 या 2 बच्चे होते हैं; गिरफ्तारी सरणी के मान पेड़ के इन-ऑर्डर ट्रैवर्सल में प्रत्येक पत्ते के मूल्यों के अनुरूप होते हैं। प्रत्येक गैर-पत्ती नोड का मान क्रमशः इसके बाएँ और दाएँ उपप्