কম্পিউটার

একটি গ্রাফে কোনো সাধারণ পৌঁছানো যোগ্য নোড আছে কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম পাইথনে নেই


ধরুন আমাদের কাছে একটি নির্দেশিত গ্রাফের একটি প্রান্ত তালিকা রয়েছে, সেখানে n নোড রয়েছে এবং নোডের নামগুলি 0 থেকে n- 1। আমাদের দুটি পূর্ণসংখ্যার মানও রয়েছে a এবং b। আমাদের পরীক্ষা করতে হবে এমন কোনো নোড c আছে কি না যাতে আমরা c থেকে a এবং c থেকে b তে যেতে পারি।

সুতরাং, যদি ইনপুট মত হয়

একটি গ্রাফে কোনো সাধারণ পৌঁছানো যোগ্য নোড আছে কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম পাইথনে নেই

এবং a =2, b =3, তাহলে আউটপুট হবে True, কারণ এখানে c =0, তাই আমাদের কাছে 0 থেকে 2 এবং 0 থেকে 3 পর্যন্ত রুট রয়েছে।

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

  • একটি ফাংশন DFS() সংজ্ঞায়িত করুন। এটি গ্রাফ, নোড, ভিজিট করা হবে
  • যদি নোড পরিদর্শন না করা হয়, তাহলে
    • নোডকে পরিদর্শন করা হিসাবে চিহ্নিত করুন
    • গ্রাফ[নোড]-এ প্রতিটি x-এর জন্য, করুন
      • DFS(গ্রাফ, x, পরিদর্শন করা)
  • প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
  • গ্রাফ :=প্রান্ত_তালিকা থেকে সংলগ্নতা তালিকা তৈরি করুন
  • পরিদর্শন_ক, পরিদর্শন_বি :=দুটি খালি সেট
  • DFS(graph, a, visited_a)
  • DFS(গ্রাফ, বি, পরিদর্শন করা_বি)
  • উত্তর :=visited_b এবং visited_a এর সংযোগস্থল থেকে একটি নতুন তালিকা
  • যদি উত্তর খালি না হয়, তাহলে
    • সত্য ফেরান
  • মিথ্যে ফেরত দিন

উদাহরণ

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

def edge_list_to_graph(edges):
   s = set()
   for x, y in edges:
      s.add(x)
      s.add(y)
   s = len(list(s))
   graph = [[] for x in range(s)]
   for x, y in edges:
      graph[y].append(x)
   return graph

def DFS(graph, node, visited):
   if node not in visited:
      visited.add(node)
      for x in graph[node]:
         DFS(graph, x, visited)

def solve(edges, a, b):
   graph = edge_list_to_graph(edges)

   visited_a, visited_b = set(), set()

   DFS(graph, a, visited_a)
   DFS(graph, b, visited_b)

   ans = list(visited_a.intersection(visited_b))
   if ans:
      return True
   return False

ed_list = [(0, 4),(4, 3),(1, 2),(0, 1),(0, 2),(1, 1)]
a = 2
b = 3
print(solve(ed_list, a, b))

ইনপুট

[(0, 4),(4, 3),(1, 2),(0, 1),(0, 2),(1, 1)], 2, 3

আউটপুট

True

  1. হিপ চেক করার প্রোগ্রামটি পাইথনে সর্বোচ্চ হিপ তৈরি করছে নাকি নয়

  2. বিজোড় দৈর্ঘ্যের চক্র পাইথনে গ্রাফে আছে কি না তা পরীক্ষা করার জন্য প্রোগ্রাম

  3. প্রদত্ত গ্রাফটি পাইথনে দ্বিপক্ষীয় কি না তা পরীক্ষা করার জন্য প্রোগ্রাম

  4. একটি প্রদত্ত স্ট্রিং কীওয়ার্ড কিনা তা পরীক্ষা করার জন্য পাইথন প্রোগ্রাম