ধরুন, বিভিন্ন প্রজন্মের সদস্যদের নিয়ে একটি পরিবার আছে। যেমন পরিবারে একজন বাবা, তার সন্তান এবং তাদের দাদী রয়েছে। কিন্তু জন্ম ও মৃত্যু প্রতিটি পরিবারেই ঘটে।
পরিবারের সবচেয়ে বড় সদস্যকে প্রধান হিসেবে বিবেচনা করা হয়। সুতরাং, 'প্রধান' সদস্য মারা গেলে, তাদের সরাসরি উত্তরসূরি বা তাদের সন্তানরা প্রধান হয়। আমরা তিনটি ফাংশন বাস্তবায়ন করি, প্রথমটি ব্যবহার করা হয় যখন একটি শিশু পরিবারে জন্ম নেয়। ফাংশনটি পিতামাতার নাম এবং সন্তানের নাম ইনপুট হিসাবে নেয় এবং তাদের রেকর্ডে যুক্ত করে।
দ্বিতীয় ফাংশন ব্যবহার করা হয় যখন একটি মৃত্যু হয়। এটি ইনপুট হিসাবে মৃত পরিবারের সদস্যের নাম নেয় এবং তাদের রেকর্ড থেকে সরিয়ে দেয়।
তৃতীয় ফাংশন উত্তরাধিকারের আদেশ দেয়। উত্তরাধিকারের বর্তমান ক্রমটি যখনই বলা হয় তখন মুদ্রিত হয়৷
৷সুতরাং, ইনপুট একটি সেট জন্য; আমাদের উত্তরাধিকারের ক্রম খুঁজে বের করতে হবে। সুতরাং, যদি ইনপুটের ক্রম হয় জন্ম, জন্ম, জন্ম, জন্ম, জন্ম, মৃত্যু, উত্তরাধিকার, মৃত্যু, উত্তরাধিকার, তাহলে আউটপুট হবে ['জাচ', 'জেসি' , 'উরসুলা', 'রায়ান', 'থিয়া'] ['জেসি', 'উরসুলা', 'রায়ান', 'থিয়া']
প্রথমে পরিবারের প্রধান হলেন পল৷
তারপর পল যথাক্রমে জ্যাক এবং জেসি নামে সন্তানের জন্ম দেন।
জেসির তখন তিনটি সন্তান ছিল; উরসুলা, রায়ান এবং থিয়া, উরসুলা সবচেয়ে বড় এবং থিয়া সবচেয়ে ছোট।
তারপর পল মারা যায়। উত্তরাধিকারের ক্রম হল ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea']।
তারপর জ্যাচ মারা যায়, উত্তরাধিকারের ক্রম হয়ে যায় ['জেসি', 'উরসুলা', 'রায়ান', 'থিয়া']।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
পরিবার :=একটি নতুন মানচিত্র যাতে মান হিসাবে তালিকা রয়েছে
-
প্রধান :=পরিবারের বর্তমান প্রধান
-
মৃত :=একটি সেট
-
একটি ফাংশন জন্ম () সংজ্ঞায়িত করুন। এটি p_name, c_name
নেবে-
পরিবারের [p_name]
শেষে c_name ঢোকান
-
-
একটি ফাংশন ডেথ () সংজ্ঞায়িত করুন। এটি নাম নেবে
-
সেট ডেডে যোগ করুন(নাম)
-
-
একটি ফাংশন উত্তরাধিকার () সংজ্ঞায়িত করুন। এটি লাগবে
-
উত্তর :=একটি নতুন তালিকা
-
depth_search(head)
-
উত্তর ফেরত দিন
-
-
একটি ফাংশন depth_search() সংজ্ঞায়িত করুন। এটি বর্তমান লাগবে
-
যদি কারেন্ট মৃত না হয়, তাহলে
-
উত্তরের শেষে বর্তমান সন্নিবেশ করুন
-
-
পরিবারের প্রতিটি শিশুর জন্য [বর্তমান], করুন
-
গভীরতা_অনুসন্ধান(শিশু)
-
-
উদাহরণ
আসুন আরও ভালভাবে বোঝার জন্য নিম্নলিখিত বাস্তবায়ন দেখি
from collections import defaultdict class Solution: def __init__(self, head_name): self.family = defaultdict(list) self.head = head_name self.dead = set() def birth(self, p_name, c_name): self.family[p_name].append(c_name) def death(self, name): self.dead.add(name) def inheritance(self): self.ans = [] self.depth_search(self.head) return self.ans def depth_search(self, current): if current not in self.dead: self.ans.append(current) for child in self.family[current]: self.depth_search(child) ob = Solution('Paul') ob.birth('Paul', 'Zach') ob.birth('Paul', 'Jesse') ob.birth('Jesse', 'Ursula') ob.birth('Jesse', 'Ryan') ob.birth('Jesse', 'Thea') ob.death('Paul') print(ob.inheritance()) ob.death('Zach') print(ob.inheritance())
ইনপুট
ob = Solution('Paul') ob.birth('Paul', 'Zach') ob.birth('Paul', 'Jesse') ob.birth('Jesse', 'Ursula') ob.birth('Jesse', 'Ryan') ob.birth('Jesse', 'Thea') ob.death('Paul') print(ob.inheritance()) ob.death('Zach') print(ob.inheritance())
আউটপুট
['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea'] ['Jesse', 'Ursula', 'Ryan', 'Thea']