2016-12-09 9 views
0

私は私の周りを包むことができないPython 3に関する質問があります。 私は次の辞書を持っているとしましょう。辞書のキーと値のペアの最長サイクル

{'Noah': 'Liam', 'Ethan': 'Peter', 'Liam': 'Olivia', 'Emma': 'Ethan', 'Peter': 'Emma', 'Olivia': 'Noah'} 

この辞書では、キーと値のペアのうち最も長いサイクルを見つける必要があります。

擬似コードでは、これは最長のサイクルは次のようになり、この例では

for key in dictionary: 
    find value in dictionary, make this key 
    continue process untill start key has been detected 

になり:

ノア - >リアム - >オリビア - >ノア(3の長さ)

私は何をしたいのか正確に知っていますが、私はこれについてどうやって行くのか分かりません。助けていただければ幸いです。

答えて

0

問題のキーワードは再帰です...またはGoogleの "リンクされたリスト"です。 1枚の紙に何をしたいかを描き、個々のステップを個別に考えてください。その少量のデータで可能です。

これは確かに最善の解決策ではなく、機能します。そして、あなたはポイントを得る。

import copy 

people = {'Noah': 'Liam', 'Ethan': 'Peter', 'Liam': 'Olivia', 'Emma': 'Ethan', 'Peter': 'Emma', 'Olivia': 'Noah'} 


def walk_the_links(person, subtree, counter): 
    print(person) 
    if person in subtree: 
     counter += 1 
     next_person = subtree[person] 
     subtree.pop(person) 
     counter = walk_the_links(next_person, subtree, counter) 
    return counter 

for person in people: 
    subtree = copy.deepcopy(people) 
    counter = 0 
    length_tree = walk_the_links(person, subtree, counter) 
    print(length_tree) 
+0

私は信じています...私は試しました。私は100種類の方法で思いついたコードを投稿することができますが、この問題にどのように取り組むべきか分かりませんでした。ああ、それは宿題ではない。 –

+0

心配しないで、私はあなたに怒らないようにしなかった。私はそれが助けてくれることを願って... http://codereview.stackexchange.com/をチェックしてください。 – renzop

+0

答えがあなたの質問に答えるなら、それを合格とマークしてください。 – renzop

関連する問題