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

পাইথনে শত্রু বর্জন করে ব্যক্তিদের আলাদা গ্রুপে বিন্যাস করার প্রোগ্রাম


মান ল করুন একটি n সংখ্যা এবং enemies নামের একটি ২D ম্যাট্রিক্স। এখানে n নির্দেশ করে n জন ব্যক্তি যাদের লেবেল [0, n-1]। enemies-এ প্রতিটি সারি [a, b] ধারণ করে যার মানে a এবং b পরস্পর শত্রু। আমাদের পরীক্ষা করতে হবে কি n জন ব্যক্তিকে দুটি গ্রুপে ভাগ করা যায় যাতে কোনো দুজন শত্রু একই গ্রুপে না থাকে।

যদি ইনপুট হয় n = 4, enemies = [[0, 3],[3, 2]], তবে আউটপুট হবে True, কারণ আমরা [0, 1, 2] এবং [3] নামে দুটি গ্রুপ বানাতে পারি।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:

  • graph := একটি খালি এডজেসেন্সি লিস্ট।

  • enemies-এ থাকা প্রতিটি (u, v) জোড়ার জন্য:

    • v কে graph[u]-এ যোগ করুন।

    • u কে graph[v]-এ যোগ করুন।

  • color := একটি নতুন ম্যাপ।

  • একটি dfs() ফাংশন সংজ্ঞায়িত করুন। এটি u, c := 0 গ্রহণ করবে।

  • যদি u color-এ থাকে, তবে color[u] == c হলে true ফেরত দিন।

  • color[u] := c

  • graph[u]-এ থাকা প্রতিটি v-এর জন্য dfs(v, c XOR 1) সব true হলে true ফেরত দিন।

  • মূল মেথড থেকে: ০ থেকে n-১ পর্যন্ত যেসব u color-এ নেই, তাদের dfs(u) সব true হলে true ফেরত দিন।

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:

উদাহরণ

class Solution:    def solve(self, n, enemies):       from collections import defaultdict       graph = defaultdict(list)       for u, v in enemies:          graph[u].append(v)          graph[v].append(u)       color = {}       def dfs(u, c=0):          if u in color:             return color[u] == c          color[u] = c          return all(dfs(v, c ^ 1) for v in graph[u])       return all(dfs(u) for u in range(n) if u not in color) ob = Solution() n = 4 enemies = [[0, 3],[3, 2]] print(ob.solve(n, enemies))

ইনপুট

4, [[0, 3],[3, 2]]

আউটপুট

True

  1. পাইথনে বাইনারি ট্রি রঙিন করা যাবে কিনা যাতে সংলগ্ন নোডগুলোর রঙ এক নহয় তা যাচাই করার প্রোগ্রাম

  2. পাইথনে প্রথম ও শেষ মান সমান সাবলিস্টের সংখ্যা খুঁজে বের করার প্রোগ্রাম

  3. পাইথনে 'a' কে 'a' বা 'b' এবং 'b' কে 'b' রেখে বানানো সম্ভাব্য স্ট্রিং সংখ্যা বের করার প্রোগ্রাম

  4. পাইথনে মাল্টি-লিস্টে একই ইন্ডেক্সের এলিমেন্ট গ্রুপ করা