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

न्यूनतम लागत का पता लगाने के लिए कार्यक्रम ताकि नागरिकों की पायथन में बाजार तक पहुंच हो

मान लीजिए, शहरों की संख्या n है और शहरों को जोड़ने वाली m सड़कें हैं। लोगों के नागरिकों को ऐसे बाजारों की जरूरत है जहां वे अपना सामान खरीद सकें। अब, शहरों में कोई बाजार नहीं है, और शहरों के बीच सड़कें निर्माणाधीन हैं। दो शहरों के बीच एक दो-तरफा सड़क बनाई जा सकती है यदि (i) शहर में एक बाजार हो; (ii) शहरों में सड़क मार्ग से जाया जा सकता है जहां बाजार है। एक सड़क बनाने की लागत x है, और बाजार बनाने की लागत y है और उन्हें दिया गया है। हमें प्रत्येक शहर के नागरिकों को बाजारों तक पहुंच प्रदान करने के लिए न्यूनतम लागत का पता लगाना होगा। सरणी 'शहरों' में उन शहरों के बारे में जानकारी होती है जिनके बारे में शहरों को सड़क मार्ग से जोड़ा जा सकता है।

इसलिए, यदि इनपुट n =4, m =3, x =1, y =2, शहर =[[1, 2], [2, 3], [3, 4]] जैसा है, तो आउटपुट होगा 4.

न्यूनतम लागत का पता लगाने के लिए कार्यक्रम ताकि नागरिकों की पायथन में बाजार तक पहुंच हो

यहां, हम चार शहर 1, 2, 3 और 4 देख सकते हैं। यदि एक शहर 1 में एक बाजार बनाया जाता है और (1, 4) और (1,3) के बीच दो और सड़कें बनाई जाती हैं, तो कुल लागत 2 + 1 होगी। + 1 =4. यह न्यूनतम लागत है।

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

  • यदि x <=y, तो
    • वापसी n * x
  • अन्यथा,
    • adj_list :=तत्वों के रूप में सूचियों वाला नक्शा
    • शहरों के प्रत्येक शहर के लिए, करें
      • शहर1:=शहर[0]
      • शहर2:=शहर[1]
      • adj_list[city1] के अंत में City2 डालें
      • adj_list[city2] के अंत में City1 डालें
    • अस्थायी:=आकार की एक नई सूची (n + 1) मूल्य के साथ आरंभिक सत्य
    • मान :=0
    • dq :=एक डबल एंडेड कतार
    • 1 से n + 1 तक के वक्र के लिए
      • यदि अस्थायी [cur] शून्य नहीं है, तो
        • मान :=मान + x
        • dq के सबसे दाहिने सिरे पर cur डालें
        • अस्थायी[cur] :=गलत
        • जबकि dq खाली नहीं है, करें
        • प्रत्येक के लिए मैं adj_list[dq का सबसे बायां तत्व निकाला गया], करता हूं
          • यदि अस्थायी [i] शून्य नहीं है, तो
            • dq के सबसे दाहिने सिरे पर i डालें
            • अस्थायी[i] :=गलत
            • मान :=मान + y
    • वापसी मूल्य

उदाहरण

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

from collections import defaultdict, deque
def solve(n, m, x, y, cities):
   if x <= y:
      return n * x
   else:
      adj_list = defaultdict(list)
      for city in cities:
         city1 = city[0]
         city2 = city[1]
         adj_list[city1].append(city2)
         adj_list[city2].append(city1)
      temp = [True] * (n + 1)
      value = 0
      dq = deque()
      for cur in range(1, n + 1):
         if temp[cur]:
            value += x
            dq.append(cur)
            temp[cur] = False
            while dq:
               for i in adj_list[dq.popleft()]:
                  if temp[i]:
                     dq.append(i)
                     temp[i] = False
                     value += y
      return value

print(solve(4, 3, 1, 2, [[1, 2], [2, 3], [3, 4]]))

इनपुट

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

आउटपुट

4

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

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

  1. पायथन में ग्राफ़ को डिस्कनेक्ट करने वाले किनारों का पता लगाने का कार्यक्रम

    मान लीजिए कि हमें एक अप्रत्यक्ष ग्राफ प्रदान किया गया है जिसे आसन्न सूची के रूप में दर्शाया गया है, जहां ग्राफ [i] नोड i के पड़ोसी नोड्स का प्रतिनिधित्व करता है। हमें किनारों की संख्या ज्ञात करनी है जो निम्नलिखित शर्त को पूरा करती है। यदि किनारे को हटा दिया जाता है, तो ग्राफ़ डिस्कनेक्ट हो जाता है।

  1. पायथन में अध्ययन करने का प्रभावी तरीका खोजने का कार्यक्रम

    मान लीजिए, हमारे पास तीन सूचियाँ हैं जिनकी लंबाई समान है। ये समय सीमा, क्रेडिट और अवधि हैं। वे पाठ्यक्रम असाइनमेंट का प्रतिनिधित्व कर रहे हैं। i−th असाइनमेंट की समय सीमा के लिए [i] इसकी समय सीमा दिखाता है, क्रेडिट [i] अपना क्रेडिट दिखाता है, और अवधि [i] असाइनमेंट पूरा करने में लगने वाले दिनों की संख