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

पायथन में एक गांव में जल वितरण का अनुकूलन करें

मान लीजिए किसी गाँव में n घर हैं। हमें सभी घरों में कुएं बनाकर और पाइप बिछाकर पानी की आपूर्ति करनी है। प्रत्येक घर के लिए, हम या तो इसके अंदर एक कुआं बना सकते हैं, भवन की लागत कुएं [i] होगी, या दूसरे कुएं से पानी में पाइप। घरों के बीच पाइप बिछाने की लागत सरणी पाइप द्वारा दी जाती है, जहां प्रत्येक पाइप [i] [हाउस 1, हाउस 2, लागत] एक पाइप का उपयोग करके हाउस 1 और हाउस 2 को एक साथ जोड़ने की लागत का प्रतिनिधित्व करता है। ये कनेक्शन द्विदिश हैं। हमें सभी घरों में पानी की आपूर्ति के लिए न्यूनतम कुल लागत का पता लगाना होगा।

इसलिए, यदि इनपुट n =3, कुओं =[1,2,2], पाइप्स =[[1,2,1], [2,3,1]] जैसा है, तो आउटपुट 3

पायथन में एक गांव में जल वितरण का अनुकूलन करें

जैसा कि ऊपर की छवि में पाइप का उपयोग करके घरों को जोड़ने की लागत को दिखाया गया है। सबसे अच्छी रणनीति यह होगी कि पहले घर में लागत 1 के साथ एक कुआं बनाया जाए और दूसरे घरों को लागत 2 से जोड़ा जाए ताकि कुल लागत 3 हो।

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

  • फ़ंक्शन ढूंढें () को परिभाषित करें। इसमें एक

    . लगेगा
  • अगर माता-पिता [ए] -1 के समान है, तो

    • वापसी एक

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

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

  • एक फ़ंक्शन यूनियन () को परिभाषित करें। इसमें a,b

    . लगेगा
  • माता-पिता_ए:=ढूंढें (ए)

  • माता-पिता_बी:=ढूंढें (बी)

  • अगर parent_a, parent_b के समान है, तो

    • सही लौटें

  • माता-पिता [parent_b] :=parent_a

  • झूठी वापसी

  • मुख्य विधि से निम्न कार्य करें -

  • पैरेंट:=आकार n + 1 की सूची बनाएं, इसे -1 से भरें

  • काउंटर :=0

  • मैं के लिए 0 से कुएं के आकार की सीमा में, ऐसा करें

    • पाइप के अंत में [0, i+1, वेल[i]] डालें

    • काउंटर :=काउंटर + 1

  • लागत के आधार पर पाइप की सरणी को क्रमबद्ध करें

  • लागत :=0

  • पाइप में प्रत्येक i के लिए, करें

    • स्रोत:=मैं[0]

    • गंतव्य:=मैं[1]

    • अस्थायी:=मैं[2]

    • यदि संघ (स्रोत, गंतव्य) गलत है, तो

      • लागत:=लागत + अस्थायी

  • वापसी लागत

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

उदाहरण

class Solution(object):
   def find(self, a):
      if self.parent[a] == -1:
         return a
      self.parent[a] = self.find(self.parent[a])
      return self.parent[a]
   def union(self,a,b):
      parent_a = self.find(a)
      parent_b = self.find(b)
      if parent_a == parent_b:
         return True
      self.parent[parent_b] = parent_a
      return False
   def minCostToSupplyWater(self, n, well, pipes):
      self.parent = [-1 for i in range(n+1)]
      counter = 0
      for i in range(len(well)):
         pipes.append([0,i+1,well[i]])
         counter+=1
      pipes = sorted(pipes,key=lambda v:v[2])
      cost = 0
      for i in pipes:
         #print(i)
         source = i[0]
         destination = i[1]
         temp = i[2]
         if not self.union(source,destination):
            cost+=temp
      return cost

ob = Solution()
print(ob.minCostToSupplyWater(3, [1,2,2], [[1,2,1],[2,3,1]]))

इनपुट

3, [1,2,2], [[1,2,1],[2,3,1]]

आउटपुट

1

  1. पायथन में वर्षा जल को फंसाना

    मान लीजिए कि हमारे पास n गैर-ऋणात्मक पूर्णांकों की एक सरणी है। ये एक ऊंचाई के नक्शे का प्रतिनिधित्व कर रहे हैं जहां प्रत्येक बार की चौड़ाई 1 है, हमें गणना करनी होगी कि बारिश के बाद यह कितना पानी फंसा सकता है। तो नक्शा इस तरह होगा - यहां हम देख सकते हैं कि 6 नीले बॉक्स हैं, इसलिए आउटपुट 6 होगा। इ

  1. पायथन में अधिकांश पानी वाला कंटेनर

    मान लीजिए कि हमारे पास n गैर-ऋणात्मक पूर्णांकों का एक सेट है a1, a2, ..., a, प्रत्येक मान निर्देशांक (i, a[i]) पर एक बिंदु का प्रतिनिधित्व करता है। n लंबवत रेखाएं इस तरह से मौजूद हैं कि रेखा i के दो समापन बिंदु (i, a[i]) और (i, a[0]) पर हैं। हमें दो लाइनें ढूंढनी हैं, जो एक्स-अक्ष के साथ मिलकर एक कं

  1. issuperset () पायथन में

    इस लेख में, हम पायथन में issuperset() और विभिन्न क्षेत्रों में इसके कार्यान्वयन के बारे में जानेंगे। यह विधि बूलियन ट्रू लौटाती है यदि एक सेट बी के सभी तत्वों में सभी तत्व सेट ए होते हैं जो एक तर्क के रूप में पारित होते हैं और यदि ए के सभी तत्व बी में मौजूद नहीं होते हैं तो झूठा रिटर्न देता है। इस