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

पायथन में कैंपस बाइक II

मान लीजिए हमारे पास एक 2D ग्रिड है, जो एक परिसर का प्रतिनिधित्व करता है, N कार्यकर्ता और M बाइक हैं, N <=M का मान है। अब प्रत्येक कार्यकर्ता और बाइक इस ग्रिड पर 2D समन्वय में हैं। इसलिए, यदि हम प्रत्येक कार्यकर्ता को एक अद्वितीय बाइक असाइन करना चाहते हैं, ताकि प्रत्येक कार्यकर्ता और उनकी असाइन की गई बाइक के बीच मैनहट्टन की दूरी का योग न्यूनतम हो।

हम जानते हैं कि दो बिंदुओं p1 और p2 के बीच मैनहट्टन की दूरी (p1, p2) =|p1.x - p2.x| + |p1.y - p2.y|। हमें प्रत्येक कार्यकर्ता और उनकी निर्धारित बाइक के बीच मैनहट्टन दूरी का न्यूनतम संभव योग खोजना होगा।

इसलिए, यदि इनपुट श्रमिकों की तरह है =[[0,0], [2,1]], बाइक =[[1,2], [3,3]]

पायथन में कैंपस बाइक II

तो आउटपुट 6

. होगा

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

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

    . लगेगा
    • वापसी |a[0]-b[0]| + |a[1] - b[1]|

  • फ़ंक्शन को हल करें () को परिभाषित करें। यह ले जाएगा बाइक, कार्यकर्ता,bikev,i:=0

  • जानकारी :=i और Bikev के साथ एक सूची

  • अगर मेमो में जानकारी मौजूद है, तो

    • वापसी ज्ञापन [जानकारी]

  • अगर मैं श्रमिकों के आकार के समान हूं, तो

    • वापसी 0

  • अस्थायी:=अनंत

  • j के लिए 0 से लेकर बाइक के आकार तक, करें

    • यदि नहीं Bikev[j] गैर-शून्य है, तो

      • बाइकव [जे]:=1

      • अस्थायी:=न्यूनतम अस्थायी, सहायक (श्रमिक [i], बाइक [जे]) + हल (बाइक, श्रमिक, बाइकव, i+1)

      • बाइकव [जे]:=0

  • ज्ञापन [जानकारी]:=अस्थायी

  • वापसी अस्थायी

  • एक फ़ंक्शन असाइनबाइक () को परिभाषित करें। यह श्रमिकों, बाइकों को ले जाएगा

  • Bikev :=एक सूची जिसका आकार बाइक के आकार के समान है, इसे असत्य से भरें

  • ज्ञापन:=एक नया नक्शा

  • रिटर्न सॉल्व (बाइक, वर्कर, बाइकव)

उदाहरण

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

class Solution(object):
   def helper(self,a,b):
      return abs( (a[0]-b[0]) ) + abs( (a[1] - b[1]) )
   def solve(self,bikes,workers,bikev,i=0):
      info = (i,tuple(bikev))
      if info in self.memo:
         return self.memo[info]
      if i == len(workers):
         return 0
      temp = float('inf')
      for j in range(len(bikes)):
         if not bikev[j]:
            bikev[j]=1
            temp = min(temp,self.helper(workers[i],bikes[j])+self.solve(bikes,workers,bi
kev,i+1))
            bikev[j]=0
      self.memo[info]= temp
      return temp
   def assignBikes(self, workers, bikes):
      bikev = [False for i in range(len(bikes))]
      self.memo={}
      return self.solve(bikes,workers,bikev)
ob = Solution()
print(ob.assignBikes([[0,0],[2,1]],[[1,2],[3,3]]))

इनपुट

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

आउटपुट

6

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

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

  1. पायथन में अंडरस्कोर (_)

    पायथन में कुछ मामलों में हम सिंगल अंडरस्कोर (_) का उपयोग करते हैं और कुछ मामलों में हम डबल अंडरस्कोर (__) का उपयोग करते हैं। पायथन में निम्नलिखित मामले हैं, जहां हम अंडरस्कोर का उपयोग करते हैं। अगर हम दुभाषिए में लास्ट एक्सप्रेशन की वैल्यू स्टोर करना चाहते हैं। यदि हम कुछ मूल्यों को अनदेखा करना चा

  1. पायथन में क्विन

    क्विन एक प्रोग्राम है, जो कोई इनपुट नहीं लेता है, लेकिन यह आउटपुट का उत्पादन करता है। यह इसका अपना सोर्स कोड दिखाएगा। इसके अतिरिक्त, क्विन की कुछ शर्तें हैं। हम प्रोग्राम के अंदर सोर्स कोड फ़ाइल नहीं खोल सकते। उदाहरण कोड a=a=%r;print (a%%a);print (a%a) आउटपुट a=a=%r;print (a%%a);print (a%a) य