カップ直径leetcode-12隔週木-1245-

件名の説明:

 

 

 

 方法の一つ:深さ優先:

クラスのソリューション:
     DEF treeDiameter(自己、エッジ:リスト[一覧[INT]]) - > int型:
        隣接 = collections.defaultdict(セット)
         のための I、J におけるエッジ:
            隣接[i]の.add(j)の
            隣接関係[J] .add(I)
        メモ = {}
         DEF DFS(I、J):
             もし(i、j)の中のメモ:
                 戻りメモ[I、J] 
            最長 = 0
             のための K 隣接[J]:
                 もし K == I:続ける
                最長 = MAX(最長、DFS(J、K))
            メモ[(I、J)] =最長+ 1枚の
             戻りメモ[(I、J)]
         のために I、J :エッジ
            DFS(i、j)は
            (DFS j、i)に対して
        リターン MAX(メモ[(I、J)] +メモ[(J、I)] - 1 用の I、J エッジ)

方法2:幅優先

クラスのソリューション:
     DEF treeDiameter(自己、エッジ:リスト[一覧[INT]]) - > int型:
        隣接 = collections.defaultdict(セット)
         のための I、J におけるエッジ:
            隣接[i]の.add(j)の
            隣接関係[J] .add(I)
        DEF BFS(ノード):
            キュー = collections.deque()
            queue.append((ノード0))
            メモ = {ノード}
             ながらキュー:
                N、長い = queue.popleft()
                 のために隣接[N]:
                     もしネイない メモ:
                        memo.add(ネイ)
                        queue.append((寧、長い +1 ))
             リターンN、長い
        
        遠い、長い = BFS(0)
        far2、最長 = BFS(遠)
         リターン最長

 

おすすめ

転載: www.cnblogs.com/oldby/p/11797956.html