কম্পিউটার টিউটোরিয়াল

পাইথনে বড় মেজ থেকে পলায়ন


ধরুন একটি গ্রিড আছে যার ১ মিলিয়ন সারি এবং ১ মিলিয়ন কলাম রয়েছে, আরো একটি ব্লক করা সেলের তালিকা রয়েছে। আমরা سورস স্কোয়ার থেকে শুরু করে টার্গেট স্কোয়ারে পৌঁছাতে চাই। প্রতিটি মুভে আমরা গ্রিডের আপ, ডাউন, লেফট, রাইট সन्नিহিত স্কোয়ারে যেতে পারি যা ব্লক করা তালিকায় নেই।

আমাদের যাচাই করতে হবে কোন সিকোয়েন্সের মাধ্যমে টার্গেট স্কোয়ারে পৌঁছানো সম্ভব কিনা।

যেমন ইনপুট blocked = [[0,1],[1,0]], source = [0,0], target = [0,3] হলে আউটপুট হবে False।

সমাধানের ধাপগুলো −

  • blocked := সমস্ত ব্লক করা সেলের একটি সেট তৈরি করুন
  • একটি dfs() মেথড সংজ্ঞায়িত করুন যা x, y, target এবং seen নেবে
  • যদি (x,y) গ্রিডের রেঞ্জের বাইরে থাকে অথবা (x,y) blocked-এ থাকে অথবা (x,y) seen-এ থাকে তবে false রিটার্ন করুন
  • (x,y) কে seen-এ যোগ করুন
  • যদি seen-এর আকার ২০০০০-এর চেয়ে বড় হয় অথবা (x,y) target হয় তবে true রিটার্ন করুন
  • চার দিকের রিকার্সিভ কলের ফলাফল OR করে রিটার্ন করুন
  • শেষে source থেকে target এবং target থেকে source দুটো DFS কল করে AND করুন

নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বোঝার জন্য −

উদাহরণ

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. পাইথনে স্ট্রিং-এ এসকেপ সিকোয়েন্স প্রসেস করা