python 深度优先遍历

最长路径

http://www.nowcoder.com/questionTerminal/430ded6b482d4d8bbcf2eca6f20e62e3

使用深度优先遍历
没看到详细题解,自己写一个 ==

  1. 先使用邻接表存储
  2. 深度优先遍历,求解所有路径最大值和
  3. 代码如下,有注释
    class Solution:
      def solve(self , n , u , v , w ):
          # write code here
          def dfs(u):
              res = 0 # 记录以当前结点u为出发点的所有路径中最大的路径值
              state[u] = True
              for nex in graph[u]: # 深度遍历以u为出发点的所有路径
                  if not state[nex[0]]: # 如果此结点未被访问,则深度遍历此节点
                      temp = dfs(nex[0])+ nex[1] # temp为当前路径的值
                      self.ans = max(self.ans, temp+res) 
                      # 最大路径就是u为出发点 当前路径的值(temp)+u为出发点 其他u为出发点(res)
                      res = max(temp,res)# 每求出一个以u为出发点的路径值(temp),就更新一下u
              return res # 返回以u为出发点的所有路径最大值
          graph = [[] for _ in range(n+1)]
          for i in range(n-1):
              graph[u[i]].append((v[i], w[i]))
              graph[v[i]].append((u[i], w[i]))
          state = [False]*(n+1)
          self.ans = 0
          dfs(1)
          return self.ans
全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务