ধরুন আমাদের একটি অনির্দেশিত গ্রাফ আছে যা আমাদের পরীক্ষা করতে হবে যে আমরা এটির ভিতরে একটি বিজোড় দৈর্ঘ্যের চক্র খুঁজে পাচ্ছি কি না৷
সুতরাং, যদি ইনপুট হয় adj_list =[[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]]পি>
তাহলে আউটপুট সত্য হবে কারণ [0, 1, 3, 4, 2], [1, 3, 4], [2, 3, 4] এর মতো বিজোড় দৈর্ঘ্যের চক্র রয়েছে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন dfs() সংজ্ঞায়িত করুন। এটি নোড নেবে, i
- যদি নোড পাথে থাকে, তাহলে
- যখন (i - পাথ[নোড]) বিজোড় হয় তখন সত্য প্রত্যাবর্তন করুন
- যদি নোড পরিদর্শন করা হয়, তাহলে
- মিথ্যে ফেরত দিন
- নোডকে পরিদর্শন করা হিসাবে চিহ্নিত করুন
- পথ[নোড] :=i
- arr[নোড]-এ প্রতিটি c-এর জন্য, do
- যদি dfs(c, i + 1) সত্য হয়, তাহলে
- সত্য ফেরান
- যদি dfs(c, i + 1) সত্য হয়, তাহলে
- ডেল পাথ[নোড]
- মিথ্যে ফেরত দিন
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -
- পরিদর্শন করেছেন :=একটি নতুন সেট, পথ :=একটি নতুন মানচিত্র
- আমি 0 থেকে arr-এর মাপ রেঞ্জের জন্য, কর
- যদি dfs(i, 0) সত্য হয়, তাহলে
- সত্য ফেরান
- মিথ্যে ফেরত দিন
উদাহরণ (পাইথন)
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
class Solution: def solve(self, arr): def dfs(node, i): if node in path: return (i - path[node]) % 2 == 1 if node in visited: return False visited.add(node) path[node] = i for c in arr[node]: if dfs(c, i + 1): return True del path[node] return False visited, path = set(), {} for i in range(len(arr)): if dfs(i, 0): return True return False ob = Solution() adj_list = [[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]] print(ob.solve(adj_list))
ইনপুট
[[1, 2], [0, 3, 4], [0, 3, 4], [1, 2, 4], [1, 2, 3]]
আউটপুট
True