用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']