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

पायथन में एक रोड ट्रिप में इंटरकंट्री ट्रैवेल्स की न्यूनतम संख्या का पता लगाने का कार्यक्रम

मान लीजिए हमें एक सड़क यात्रा की योजना बनानी है जिसमें विभिन्न देशों के विभिन्न शहरों का दौरा करना शामिल है। हमारे पास सड़कों 'R' की एक सूची है, जहां प्रत्येक तत्व को (x, y, लागत) के रूप में वर्णित किया गया है। x सड़क के शुरुआती शहर को दर्शाता है, y सड़क के गंतव्य शहर को दर्शाता है, और लागत उस सड़क से यात्रा करने की लागत को दर्शाती है। हमारे पास एक सूची 'सी' भी है जहां प्रत्येक तत्व एक देश है और एक तत्व में उस देश के शहर शामिल हैं। अब, हमारे पास एक आरंभिक शहर 'एस' और एक गंतव्य शहर 'ई' भी है, और हम स्रोत शहर से गंतव्य शहर की यात्रा करना चाहते हैं। इस सारी जानकारी को देखते हुए, हमें यात्रा को पूरा करने के लिए न्यूनतम अंतरदेशीय यात्राओं का पता लगाना होगा और यात्रा के लिए यात्रा की कुल लागत का भी पता लगाना होगा। हमें इन दो मानों को आउटपुट के रूप में प्रिंट करना होगा।

इसलिए, यदि इनपुट R =[[0, 1, 2], [1, 2, 2], [0, 2, 3], [1, 3, 3]], C =[[0] जैसा है, [1], [2, 3]], s =0, e =3, तो आउटपुट (2,5) होगा।

तो, 0 से 3 तक यात्रा करने के लिए हम 0->1->3 का रास्ता अपनाते हैं। इस रास्ते में ली गई सड़कें [0, 1, 2], और [1, 3, 3] हैं। इस प्रकार, कुल देश-से-देश यात्रा 2 है और कुल लागत 2 + 3 =5 है।

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

  • cont :=एक नया नक्शा जहां डिफ़ॉल्ट मान 0 हैं
  • प्रत्येक अनुक्रमणिका idx, और C में तत्व आइटम के लिए, करें
    • आइटम में प्रत्येक k के लिए, करें
      • cont[k] :=idx
  • adj_list :=एक नया नक्शा जिसमें मान के रूप में सूचियां हैं
  • R में प्रत्येक a, b, wt के लिए, do
    • अगर cont[a], cont[b] के समान नहीं है, तो
      • wt:=wt + 10 ^ 10
    • adj_list[a]
    • . के अंत में एक जोड़ी (b, wt) डालें
  • दूरी:=एक नया नक्शा जहां डिफ़ॉल्ट मान 10 ^ 20
  • . हैं
  • दूरी[s] :=0
  • विज़िट किया :=एक नया सेट
  • t :=एक जोड़ी (0, s) युक्त एक नया ढेर
  • जबकि t खाली नहीं है, करें
    • जोड़ी (डी, सी) :=ढेर से सबसे छोटी वस्तु को पॉप करें
    • अगर विज़िट में c मौजूद है, तो
      • अगले पुनरावृत्ति के लिए जाएं
    • विज़िट में c जोड़ें
    • प्रत्येक j के लिए, adj_list में wt[c], do
      • यदि दूरी[j]> d + wt, तो
        • दूरी[j] :=d + wt
        • टी को ढेर करने के लिए जोड़ी (डी + डब्ल्यूटी, जे) डालें
  • वापसी जोड़ी (फ्लोर वैल्यू (दूरी[ई] / 10 ^ 10), (दूरी [ई] मॉड 10 ^ 10))

उदाहरण

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

from collections import defaultdict
from heapq import heappush, heappop

def solve(R, C, s, e):
   cont = defaultdict(int)
   for idx, item in enumerate(C):
      for k in item:
         cont[k] = idx

   adj_list = defaultdict(list)
   for a, b, wt in R:
      if cont[a] != cont[b]:
         wt += 10 ** 10
      adj_list[a].append((b, wt))

   distance = defaultdict(lambda: 10 ** 20)
   distance[s] = 0
   visited = set()

   t = [(0, s)]
   while t:
      d, c = heappop(t)
      if c in visited:
         continue
      visited.add(c)
      for j, wt in adj_list[c]:
         if distance[j] > d + wt:
            distance[j] = d + wt
            heappush(t, (d + wt, j))

   return distance[e] // 10 ** 10, distance[e] % 10 ** 10

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

इनपुट

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

आउटपुट

(2, 5)

  1. पायथन में हर स्थिति तक पहुंचने के लिए शतरंज के टुकड़े के लिए न्यूनतम चालों का पता लगाने का कार्यक्रम

    मान लीजिए, हमारे पास एक शतरंज की बिसात और एक विशेष नाइट पीस K है, जो बोर्ड के भीतर L आकार में चलता है। यदि टुकड़ा स्थिति (x1, y1) में है और यदि यह (x2, y2) पर जाता है तो आंदोलन को x2 =x1 ± a के रूप में वर्णित किया जा सकता है; y2 =y1 ± b या x2 =x1 ± b; y2 =y1 ± ए; जहाँ a और b पूर्णांक संख्याएँ हैं। ह

  1. पायथन में गोदाम में रखे जाने वाले बक्सों की संख्या का पता लगाने का कार्यक्रम

    मान लीजिए, हमारे पास पूर्णांक वाले दो सरणियाँ हैं। एक सूची में कुछ इकाई चौड़ाई वाले बक्सों की ऊँचाई होती है और दूसरी सूची में गोदाम में कमरों की ऊँचाई होती है। कमरों की संख्या 0...n है, और कमरों की ऊंचाई सरणी गोदाम में उनके संबंधित सूचकांक में प्रदान की जाती है। हमें पता लगाना है कि कितने बक्सों को

  1. सूची में सबसे छोटी संख्या खोजने के लिए पायथन प्रोग्राम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें सभी सूची दी गई है, हमें सूची में उपलब्ध सबसे छोटी संख्या प्रदर्शित करने की आवश्यकता है यहां हम या तो सूची को क्रमबद्ध कर सकते हैं और सबसे छोटा तत्व प्राप्त कर सकते हैं या सबसे छोटा तत्व प्राप्त करने के लिए अंतर्न