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.