Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm ra thứ tự thừa kế trong một họ bằng Python

Giả sử, có một gia đình bao gồm các thành viên từ các thế hệ khác nhau. Chẳng hạn như gia đình có cha, các con của ông, và bà của chúng. Nhưng sinh và tử xảy ra trong mỗi gia đình.

Thành viên lớn nhất trong gia đình được coi là người đứng đầu. Vì vậy, khi thành viên 'đứng đầu' qua đời, người kế thừa trực tiếp hoặc con cái của họ sẽ trở thành người đứng đầu. Chúng tôi thực hiện ba chức năng, chức năng đầu tiên được sử dụng khi một đứa trẻ được sinh ra trong gia đình. Hàm lấy tên cha mẹ và tên con làm đầu vào và thêm chúng vào bản ghi.

Chức năng thứ hai được sử dụng khi có một cái chết. Nó lấy tên của thành viên gia đình đã qua đời làm đầu vào và xóa họ khỏi hồ sơ.

Hàm thứ ba cho biết thứ tự kế thừa. Thứ tự kế thừa hiện tại được in bất cứ khi nào nó được gọi.

Vì vậy, đối với một tập hợp các đầu vào; chúng ta phải tìm ra thứ tự kế thừa Vì vậy, nếu thứ tự đầu vào là sinh, sinh, đẻ, sinh, đẻ, chết, thừa kế, chết, thừa kế, thì đầu ra sẽ là ['Zach', 'Jesse' , 'Ursula', 'Ryan', 'Thea'] ['Jesse', 'Ursula', 'Ryan', 'Thea']

Lúc đầu, chủ gia đình là Paul.

Sau đó, Paul có các con lần lượt tên là Zach và Jesse.

Jesse sau đó có ba người con; Ursula, Ryan và Thea, Ursula là con cả và Thea là con út.

Sau đó, Paul chết. Thứ tự thừa kế là ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea'].

Sau đó Zach chết, thứ tự thừa kế trở thành ['Jesse', 'Ursula', 'Ryan', 'Thea'].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • family:=một bản đồ mới chứa danh sách dưới dạng giá trị

  • head:=chủ gia đình hiện tại

  • dead:=a set

  • Định nghĩa một hàm sinh (). Điều này sẽ lấy p_name, c_name

    • chèn c_name vào cuối họ [p_name]

  • Định nghĩa một hàm death (). Tên này sẽ có tên

    • thêm (tên) vào tập hợp chết

  • Định nghĩa kế thừa hàm (). Điều này sẽ mất

    • ans:=một danh sách mới

    • deep_search (đầu)

    • trả lại ans

  • Xác định một hàm depth_search (). Điều này sẽ hiện tại

    • nếu dòng điện không chết thì

      • chèn dòng điện vào cuối ans

    • đối với mỗi đứa trẻ trong gia đình [hiện tại], hãy thực hiện

      • deep_search (con)

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn

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())

Đầu vào

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())

Đầu ra

['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea']
['Jesse', 'Ursula', 'Ryan', 'Thea']