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

পাইথনে Course Schedule (কোর্স শিডিউল) সমাধান


মনে করুন মোট numCoursesটি কোর্স নিতে হবে, লেবেল ০ থেকে numCourses-1। কিছু কোর্সের প্রি-রেকুইজিট থাকতে পারে, যেমন কোর্স ০ নেওয়ার আগে কোর্স ১ নিতে হবে, যা [0,1] পেয়ার দিয়ে এক্সপ্রেস করা হয়। মোট কোর্স সংখ্যা এবং প্রি-রেকুইজিট পেয়ার লিস্ট দেওয়া থাকলে, সব কোর্স শেষ করা সম্ভব কিনা চেক করতে হবে।

ইনপুট যদি numCourses = 2 এবং prerequisites = [[1, 0]] হয়, তবে রেজাল্ট হবে true, কারণ মোট ২টি কোর্স। কোর্স ১ নেওয়ার আগে কোর্স ০ শেষ করতে হবে। তাই সম্ভব।

এটি সমাধান করতে আমরা নিচের ধাপগুলো ফলো করব (সাইকেল ডিটেকশন DFS):

  • মেইন মেথড numCourses এবং prerequisites নেবে:

    • যদি prerequisites খালি হয়, তবে true রিটার্ন করুন।

    • visited অ্যারে ০ দিয়ে পূরণ, সাইজ numCourses।

    • adj_list := prerequisites দিয়ে গ্রাফ তৈরি করুন

    • for i in range 0 to numCourses:

      • যদি visited[i] false হয়, তবে:

        • যদি ভিজিটেড নোডগুলোর মধ্যে সাইকেল পাওয়া যায়, তবে false রিটার্ন করুন।

    • return true

উদাহরণ

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

class Solution(object):
    def canFinish(self, numCourses, prerequisites):
        if len(prerequisites) == 0:
            return True
        visited = [0 for i in range(numCourses)]
        adj_list = self.make_graph(prerequisites)
        for i in range(numCourses):
            if not visited[i]:
                if not self.cycle(adj_list, visited, i):
                    return False
        return True

    def cycle(self, adj_list, visited, current_node=0):
        if visited[current_node] == -1:
            return False
        if visited[current_node] == 1:
            return True
        visited[current_node] = -1
        if current_node in adj_list:
            for i in adj_list[current_node]:
                if not self.cycle(adj_list, visited, i):
                    return False
        visited[current_node] = 1
        return True

    def make_graph(self, array):
        adj_list = {}
        for i in array:
            if i[1] in adj_list:
                adj_list[i[1]].append(i[0])
            else:
                adj_list[i[1]] = [i[0]]
        return adj_list

ob = Solution()
print(ob.canFinish(2, [[1,0]]))

ইনপুট

2 [[1,0]]

আউটপুট

true

  1. পাইথনে ফাংশন ডিফাইন করা (Defining a Function)

  2. পাইথনে ইভেন্ট শিডিউলার

  3. পাইথনে একাধিক মান রিটার্ন করা (Returning Multiple Values in Python)

  4. পাইথনে একাধিক ভ্যালু রিটার্ন কীভাবে করবেন?