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

猜你喜欢