Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで家族の継承順序を見つけるプログラム


さまざまな世代のメンバーで構成される家族があるとします。家族のようなものには、父親、彼の子供、そして彼らの祖母がいます。しかし、出生と死は各家族で起こります。

家族の長男は頭と見なされます。したがって、「頭」のメンバーが死亡すると、その直接の後継者またはその子が頭になります。 3つの機能を実装します。最初の機能は、子供が家族に生まれるときに使用されます。この関数は、親の名前と子の名前を入力として受け取り、それらをレコードに追加します。

2番目の関数は、死亡した場合に使用されます。亡くなった家族の名前を入力として受け取り、レコードから削除します。

3番目の関数は、継承の順序を示します。現在の継承順序は、呼び出されるたびに出力されます。

したがって、一連の入力については、継承の順序を見つける必要があります。したがって、入力の順序が誕生、誕生、誕生、誕生、誕生、死、継承、死、継承のようなものである場合、出力は['Zach'、'Jesse'になります。 、'Ursula'、'Ryan'、'Thea'] ['Jesse'、'Ursula'、'Ryan'、'Thea']

最初、家族の長はポールです。

それからパウロにはそれぞれザックとジェシーという名前の子供がいました。

その後、ジェシーには3人の子供がいました。ウルスラ、ライアン、シーア。ウルスラが最年長で、シーアが最年少です。

それからポールは死にます。継承の順序は、['Zach'、'Jesse'、'Ursula'、'Ryan'、'Thea']です。

その後、ザックは死に、継承の順序は['ジェシー'、'ウルスラ'、'ライアン'、'シーア']になります。

これを解決するには、次の手順に従います-

  • family:=値としてリストを含む新しいマップ

  • 頭:=家族の現在の頭

  • 死んだ:=セット

  • 関数birth()を定義します。これにはp_name、c_name

    が必要です
    • ファミリの最後にc_nameを挿入します[p_name]

  • 関数death()を定義します。これは名前になります

    • セットデッドにadd(name)

  • 関数inheritance()を定義します。これには時間がかかります

    • ans:=新しいリスト

    • 深さ優先探索(ヘッド)

    • ansを返す

  • 関数depth_search()を定義します。これには現在の時間がかかります

    • 電流が流れていない場合は、

      • ansの最後に電流を挿入

    • 家族の子供ごとに[現在]、実行

      • 深さ検索(子)

理解を深めるために、次の実装を見てみましょう

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

  1. グラフがPythonのすべての人によってトラバース可能かどうかを確認するプログラム

    0からn-1までの番号が付けられたn個の頂点を含むグラフが与えられたとします。グラフは無向であり、各エッジには重みがあります。グラフには3種類の重みを設定でき、各重みは特定のタスクを示します。グラフをトラバースできるのは、ジャックとケーシーの2人です。エッジの重みが1の場合、ジャックはグラフをトラバースできます。重みが2の場合、ケーシーはグラフをトラバースできます。エッジの重みが3の場合、両方がグラフをトラバースできます。グラフを両方でトラバース可能にするために必要なエッジをすべて削除する必要があります。ジャックとケーシー。グラフをトラバース可能にするために削除するエッジの数を返します。トラバ

  2. Pythonプログラムで配列の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n):    # using built-in function    return(sum(arr)) # main arr = [11,22,33,44,55,66