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

以上是 用Python找出家族中继承顺序的程序 的全部内容, 来源链接: utcz.com/z/357162.html

回到顶部