用Python找出家族中继承顺序的程序
假设有一个家庭由不同世代的成员组成。比如这个家庭有一个父亲,他的孩子,还有他们的祖母。但是出生和死亡发生在每个家庭中。
家庭中最年长的成员被认为是一家之主。因此,当“首领”成员去世时,他们的直接继任者或他们的孩子成为首领。我们实现了三个函数,第一个函数在孩子出生时使用。该函数将父母的姓名和孩子的姓名作为输入并将它们添加到记录中。
当有死亡时使用第二个功能。它将已故家庭成员的姓名作为输入并将其从记录中删除。
第三个函数给出了继承顺序。每当调用时都会打印当前的继承顺序。
所以,对于一组输入;我们必须找出继承的顺序。所以,如果输入的顺序是出生、出生、出生、出生、出生、死亡、继承、死亡、继承,那么输出将是['Zach','Jesse','Ursula','Ryan','Thea']['Jesse','Ursula','Ryan','Thea']
起初,一家之主是保罗。
然后保罗分别有了孩子,名叫扎克和杰西。
杰西随后生了三个孩子;Ursula、Ryan和Thea,Ursula是最年长的,Thea是最年轻的。
然后保罗死了。继承顺序是['Zach','Jesse','Ursula','Ryan','Thea']。
然后Zach死了,继承顺序变成了['Jesse','Ursula','Ryan','Thea']。
示例
让我们看下面的实现来更好地理解
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']