Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 패밀리의 상속 순서를 찾는 프로그램

<시간/>

다른 세대의 구성원으로 구성된 가족이 있다고 가정합니다. 예를 들어 가족에는 아버지, 자녀, 할머니가 있습니다. 그러나 출생과 사망은 각 가정에서 발생합니다.

가족의 가장 오래된 구성원은 머리로 간주됩니다. 따라서 '주' 멤버가 사망하면 직계승계자 또는 자녀가 책임자가 됩니다. 우리는 세 가지 기능을 구현합니다. 첫 번째 기능은 자녀가 가족으로 태어날 때 사용됩니다. 이 함수는 부모의 이름과 자식의 이름을 입력으로 받아 레코드에 추가합니다.

두 번째 기능은 사망이 있을 때 사용됩니다. 사망한 가족 구성원의 이름을 입력으로 받아 기록에서 제거합니다.

세 번째 함수는 상속 순서를 제공합니다. 현재 상속 순서는 호출될 때마다 인쇄됩니다.

따라서 일련의 입력에 대해 우리는 상속의 순서를 찾아야 합니다. 따라서 입력 순서가 출생, 출생, 출생, 출생, 출생, 사망, 상속, 사망, 상속과 같으면 출력은 ['Zach', 'Jesse' , 'Ursula', 'Ryan', 'Thea'] ['Jesse', 'Ursula', 'Ryan', 'Thea']

처음에는 가족의 머리가 Paul입니다.

그런 다음 Paul은 각각 Zach와 Jesse라는 이름의 자녀를 두었습니다.

제시는 세 자녀를 두었다. Ursula, Ryan, Thea, Ursula는 맏이이고 Thea는 막내입니다.

그리고 바울은 죽습니다. 상속 순서는 ['Zach', 'Jesse', 'Ursula', 'Ryan', 'Thea']입니다.

그런 다음 Zach가 죽고 상속 순서는 ['Jesse', 'Ursula', 'Ryan', 'Thea']가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • family :=값으로 목록을 포함하는 새 지도

  • head :=가족의 현재 가장

  • 죽은 :=세트

  • 함수 birth() 를 정의합니다. 이것은 p_name, c_name

    을 사용합니다.
    • 패밀리[p_name]의 끝에 c_name 삽입

  • 함수 death() 를 정의하십시오. 이름이 지정됩니다.

    • 죽은 세트에 추가(이름)

  • 함수 상속()을 정의합니다. 소요 시간

    • ans :=새 목록

    • depth_search(머리)

    • 반환

  • depth_search() 함수를 정의합니다. 현재 진행 중입니다.

    • 전류가 죽지 않은 경우

      • ans의 끝에 전류 삽입

    • 가족[현재]의 각 자녀에 대해 수행

      • depth_search(자식)

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다.

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