zoukankan      html  css  js  c++  java
  • 树-广度优先(图)

    310. 最小高度树
    对于一个具有树特征的无向图,我们可选择任何一个节点作为根。图因此可以成为树,在所有可能的树中,具有最小高度的树被称为最小高度树。给出这样的一个图,写出一个函数找到所有的最小高度树并返回他们的根节点。
    
    格式
    
    该图包含 n 个节点,标记为 0 到 n - 1。给定数字 n 和一个无向边 edges 列表(每一个边都是一对标签)。
    
    你可以假设没有重复的边会出现在 edges 中。由于所有的边都是无向边, [0, 1]和 [1, 0] 是相同的,因此不会同时出现在 edges 里。
    
    示例 1:
    
    输入: n = 4, edges = [[1, 0], [1, 2], [1, 3]]
    
            0
            |
            1
           / 
          2   3 
    
    输出: [1]
    只要找到最长的那条路径,返回最中间位置的节点即可。
    
    我们将路径记录到graph这个dict中
    
    然后从所有叶子节点开始BFS,
    从节点i到达下一个节点j时,
        我们直接从graph[j]中将前一个节点i移除,
        然后判断j的剩余连接数,如果大于1,
            则表明我们当前所在树枝不是节点j连接的最长树枝,
            因为越短的枝,越早到达交汇处
            我们终止遍历,将此树枝舍弃掉
        如果连接数为1,
            则表明我们当前所在的树枝,有可能是最长的那个
            将j添加到下一轮的遍历中
    最后,我们找不到下一轮的节点了
    至此我们已经树上的所有节点遍历完成
    返回这轮的所有节点即可
    
    作者:vzp
    链接:https://leetcode-cn.com/problems/minimum-height-trees/solution/python3-bfs-ti-jie-by-vzp/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code
    class Solution:
        def findMinHeightTrees(self, n: int, edges: List[List[int]]) -> List[int]:
            graph = collections.defaultdict(set)
            for p, q in edges:
                graph[p].add(q)
                graph[q].add(p)
    
            nodes = []
            for i in range(n):
                if len(graph[i]) < 2:
                    nodes.append(i)
    
            while True:
                temp = []
                for i in nodes:
                    for j in graph[i]:
                        graph[j].remove(i)
                        if len(graph[j]) == 1:
                            temp.append(j)
                if not temp:
                    return nodes
                nodes = temp
    View Code
  • 相关阅读:
    BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图
    BZOJ 1412 [ZJOI2009]狼和羊的故事 | 网络流
    BZOJ 2242 [SDOI2011]计算器 | BSGS
    BZOJ 2480 && 3239 && 2995 高次不定方程(高次同余方程)
    用JS制作博客页面背景随滚动渐变的效果
    BZOJ 3876 支线剧情 | 有下界费用流
    ZOJ 1314 Reactor Cooling | 上下界无源汇可行流
    BZOJ 百题纪念!
    BZOJ 3238 [Ahoi2013] 差异 | 后缀数组 单调栈
    BZOJ 4417 [Shoi2013]超级跳马
  • 原文地址:https://www.cnblogs.com/topass123/p/13379910.html
Copyright © 2011-2022 走看看