কম্পিউটার

একটি বড় গোলকধাঁধা পাইথন এস্কেপ


ধরুন আমাদের একটি গ্রিড আছে, সেখানে 1 মিলিয়ন সারি এবং 1 মিলিয়ন কলাম রয়েছে, আমাদের কাছে ব্লক করা ঘরগুলির একটি তালিকাও রয়েছে। এখন আমরা উৎস বর্গ থেকে শুরু করব এবং লক্ষ্য স্কোয়ারে পৌঁছতে চাই। প্রতিটি পদক্ষেপে, আমরা গ্রিডের একটি উপরে, নিচে, বাম, ডান পাশের বর্গক্ষেত্রে যেতে পারি যা ব্লক করা কক্ষের প্রদত্ত তালিকায় নেই।

চালের ক্রমানুসারে লক্ষ্য স্কোয়ারে পৌঁছানো সম্ভব কি না তা আমাদের পরীক্ষা করতে হবে।

সুতরাং, যদি ইনপুটটি ব্লক করা হয় =[[0,1], [1,0]], উৎস =[0,0], লক্ষ্য =[0,3], তাহলে আউটপুটটি মিথ্যা হবে

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • ব্লকড :=সমস্ত ব্লক করা সেলের একটি সেট তৈরি করুন

  • একটি পদ্ধতি সংজ্ঞায়িত করুন dfs(), এটি x, y, লক্ষ্য এবং দেখা হবে

  • যদি (x,y) গ্রিডের পরিসরে না থাকে বা (x,y) অবরুদ্ধ থাকে বা (x,y) দেখা যায় তাহলে

    • ফেরত মিথ্যা


  • দেখায় (x,y) যোগ করুন

  • যদি দেখা যায় এর আকার> 20000 বা (x,y) টার্গেট হয়, তাহলে

    • প্রত্যাবর্তন সত্য

  • dfs(x+1,y,target,seen) অথবা dfs(x-1,y,target,seen) অথবা dfs(x,y+1,target,seen) অথবা dfs(x,y-1,টার্গেট, দেখা)

  • dfs(উৎস[0], উৎস [1], টার্গেট, খালি সেট) এবং dfs(টার্গেট[0], টার্গেট[1], উৎস, খালি সেট)

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

class Solution(object):
   def isEscapePossible(self, blocked, source, target):
      blocked = set(map(tuple, blocked))
      def dfs(x, y, target, seen):
         if not (0 <= x < 10**6 and 0 <= y < 10**6) or (x, y) in blocked or (x, y) in seen: return             False
         seen.add((x, y))
         if len(seen) > 20000 or [x, y] == target: return True
         return dfs(x + 1, y, target, seen) or \
            dfs(x - 1, y, target, seen) or \
            dfs(x, y + 1, target, seen) or \
            dfs(x, y - 1, target, seen)
         return dfs(source[0], source[1], target, set()) and
dfs(target[0], target[1], source, set())
ob = Solution()
print(ob.isEscapePossible([[0,1],[1,0]], [0,0], [0,3]))

ইনপুট

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

আউটপুট

False

  1. পাইথনে ক্ষুদ্রতম চক্রের দৈর্ঘ্য ধরে রাখার লক্ষ্য খুঁজে বের করার প্রোগ্রাম

  2. কিভাবে পাইথন ব্যবহার করে বড় সংখ্যা যোগ/বিয়োগ করবেন?

  3. কিভাবে পাইথনে খুব বড় সংখ্যা পরিচালনা করবেন?

  4. পাইথনে একটি স্ট্রিং এস্কেপ সিকোয়েন্স কিভাবে প্রক্রিয়া করবেন?