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']
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP