Python程序:查找家庭中的继承顺序


假设,一个家庭由不同代的成员组成。例如,这个家庭有一个父亲、他的孩子和他们的祖母。但在每个家庭中都会发生出生和死亡。

家庭中最年长的成员被认为是族长。因此,当“族长”去世时,他们的直接继承人或他们的孩子成为族长。我们实现了三个函数,第一个函数用于当孩子出生到家庭中时。该函数以父母姓名和孩子姓名作为输入,并将它们添加到记录中。

第二个函数用于发生死亡时。它以已故家庭成员的姓名作为输入,并将他们从记录中删除。

第三个函数给出继承顺序。每当调用它时,都会打印当前的继承顺序。

因此,对于一组输入;我们必须找出继承顺序。因此,如果输入顺序类似于出生、出生、出生、出生、出生、死亡、继承、死亡、继承,则输出将是 ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea'] ['Jesse', 'Ursula', 'Ryan', 'Thea']

最初,家庭族长是 Paul。

然后 Paul 有了分别名为 Zach 和 Jesse 的孩子。

然后 Jesse 有了三个孩子:Ursula、Ryan 和 Thea,其中 Ursula 是老大,Thea 是老小。

然后 Paul 去世。继承顺序为 ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea']。

然后 Zach 去世,继承顺序变为 ['Jesse', 'Ursula', 'Ryan', 'Thea']。

为了解决这个问题,我们将遵循以下步骤:

  • family := 一个新的映射,其中包含列表作为值

  • head := 家庭的当前族长

  • dead := 一个集合

  • 定义一个函数 birth() 。这将接收 p_name、c_name

    • 将 c_name 插入到 family[p_name] 的末尾

  • 定义一个函数 death() 。这将接收 name

    • 将 name 添加到集合 dead 中

  • 定义一个函数 inheritance() 。这将接收

    • ans := 一个新的列表

    • depth_search(head)

    • 返回 ans

  • 定义一个函数 depth_search() 。这将接收 current

    • 如果 current 不在 dead 中,则

      • 将 current 插入到 ans 的末尾

    • 对于 family[current] 中的每个孩子,执行

      • depth_search(child)

示例

让我们看看以下实现以获得更好的理解

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

更新于: 2021年10月6日

1K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.