用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 defaultdictclass 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']
以上是 用Python找出家族中继承顺序的程序 的全部内容, 来源链接: utcz.com/z/357162.html