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

पायथन में विभिन्न समानता के साथ एक मूल्य तक पहुंचने के लिए आवश्यक न्यूनतम छलांग लगाने का कार्यक्रम

मान लीजिए, हमें संख्याओं की एक सूची प्रदान की जाती है जिसे अंक कहते हैं। यदि सूची में मान मौजूद हैं तो यहां हम इंडेक्स i + नंबर [i] या i - नंबर [i] इंडेक्स i से कूद सकते हैं। इसलिए हमें इनपुट में क्रम को अपरिवर्तित रखते हुए अलग-अलग समता के साथ दूसरे मूल्य तक पहुंचने के लिए कम से कम आवश्यक छलांगों की संख्या का पता लगाना होगा। यदि हम भिन्न समता के साथ किसी अन्य संख्या तक नहीं पहुँच सकते हैं, तो इसे -1 पर सेट किया जाता है।

इसलिए, यदि इनपुट संख्याओं की तरह है =[7, 3, 4, 5, 6, 9, 6, 7], तो आउटपुट [−1, 1, 2, −1, −1, −1, 1 होगा। , -1]।

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

  • फ़ंक्शन को परिभाषित करें bfs() । इसमें मुझे लगेगा

    • q :=एक जोड़ी के साथ एक नई डबल एंडेड कतार (i, 0)

    • देखा :=एक नया सेट

    • जबकि q खाली नहीं है, करें

      • (j, d) :=q के अधिकांश तत्व को छोड़ दिया और q से सबसे बाईं ओर की वस्तु को हटा दें

      • देखा में j जोड़ें

      • अगर (nums[i] + nums[j]) mod 2 गैर-शून्य है, तो

        • वापसी d

      • [j + nums[j], j - nums[j]] में प्रत्येक k के लिए, करें

        • अगर 0 <=k <अंकों का आकार और k दिखाई नहीं दे रहा है, तो

          • q के दाएँ छोर पर (k, d + 1) डालें

    • वापसी 10^10

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

  • उत्तर :=एक नई सूची

  • मेरे लिए 0 से लेकर अंकों के आकार तक, करें

    • देखा :=एक नया सेट

    • एक्स:=बीएफएस (आई)

    • x को उत्तर में जोड़ दें जब x <10^10 अन्यथा −1 को जोड़ दें

  • वापसी उत्तर

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

उदाहरण

from collections import deque
class Solution:
   def solve(self, nums):
      def bfs(i):
         q = deque([(i, 0)])
         seen = set()
         while q:
            j, d = q.popleft()
            seen.add(j)
            if (nums[i] + nums[j]) % 2:
               return d
            for k in [j + nums[j], j − nums[j]]:
               if 0 <= k < len(nums) and k not in seen:
                  q.append((k, d + 1))
         return 10 ** 10
      ans = []
      for i in range(len(nums)):
         seen = set()
         x = bfs(i)
         ans.append(x if x < 10 ** 10 else −1)
      return ans
ob = Solution()
print(ob.solve([7, 3, 4, 5, 6, 9, 6, 7]))

इनपुट

numbers = [7, 3, 4, 5, 6, 9, 6, 7]

आउटपुट

[−1, 1, 2, −1, −1, −1, 1, −1]

  1. पायथन का उपयोग करके सभी नोड्स तक पहुंचने के लिए न्यूनतम संख्या में कोने खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक निर्देशित चक्रीय ग्राफ है, जिसमें n कोने हैं और नोड्स 0 से n-1 तक गिने जाते हैं, ग्राफ को किनारे की सूची द्वारा दर्शाया जाता है, जहां किनारों [i] =(यू, वी) नोड यू से एक निर्देशित किनारे का प्रतिनिधित्व करता है। नोड वी। हमें शिखर का सबसे छोटा सेट ढूंढना है जिससे ग्राफ में सभ

  1. पायथन में एक शतरंज नाइट द्वारा लक्ष्य की स्थिति तक पहुंचने के लिए न्यूनतम कदम खोजने का कार्यक्रम

    मान लीजिए हमारे पास दो मान r और c हैं। यदि एक शतरंज के शूरवीर को एक असीम रूप से बड़े शतरंज बोर्ड में शुरुआत में निर्देशांक (0, 0) पर रखा जाता है, तो हमें स्थान (आर, सी) तक पहुंचने के लिए न्यूनतम चालों की संख्या का पता लगाना होगा। शूरवीर शतरंज के समान गतिमान शैली का अनुसरण करेगा। यह क्षैतिज रूप से दो

  1. पायथन में बिल्कुल k जंप में अंतिम द्वीप तक पहुंचने के लिए आवश्यक न्यूनतम अधिकतम लंबाई का पता लगाएं

    मान लीजिए कि हमारे पास संख्याओं की एक सरणी A है, A में i-th संख्या वह स्थिति है जहां एक द्वीप मौजूद है, और दूसरा पूर्णांक k दिया गया है (1 ≤ k