zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 11-1

    Clone Graph

    dfs或者bfs都可以做,这题的要点是hashmap有两个作用:一是图遍历中的visited,另一个是存copy的结点来连接neighbors。hashmap即表示visited,同时存某个结点的copy(这里有copy了就是已经visited)。

    • bfs和dfs本身特性的区别
      • bfs: 进q和展开是分开的。因为是按层处理,只有下层全进q,才开始从头出q同时展开下一层
      • dfs: 这里递归下一层相当于进q,展开相当于出q,也就是说进q和展开是同时的。
    • 根据上面1,dfs/bfs对visited的定义不同(or加入hashmap和判断visited的时机)
      • bfs:如果当前结点的neighbors没有创建结点,要创建并加入hashmap中。这样才能保证连接。同时要加入q中。而visited就表示已经进q了。而出q的结点不做visited判断
      • dfs:同样是"进q"的时候,visited判断和加入hashmap同时发生在一层。展开的neighbors要进入下一层
    # Definition for a undirected graph node
    # class UndirectedGraphNode(object):
    #     def __init__(self, x):
    #         self.label = x
    #         self.neighbors = []
    
    class Solution(object):
        def cloneGraph(self, node):
            """
            :type node: UndirectedGraphNode
            :rtype: UndirectedGraphNode
            """
            def clone(node, umap):
                if node not in umap:
                    umap[node]=UndirectedGraphNode(node.label)
                    for n in node.neighbors:
                        umap[node].neighbors.append(clone(n, umap))
                return umap[node]
            
            umap = {}
            if not node: return None
            return clone(node, umap)
    
  • 相关阅读:
    VS2013折叠代码、打开代码的快捷键
    用if做了一个简单的猜拳游戏(做的不好还请指点,谢谢!)
    一维数组的应用
    do while 与while的区别!
    作业.把c语言输出的基础差不多都概括了!
    C语言基础
    c语言:蜗牛的爬行。
    QQ群成员提取
    入门教程2
    VMware WorkStations最小化安装&配置&卸载CentOS 7
  • 原文地址:https://www.cnblogs.com/absolute/p/5675803.html
Copyright © 2011-2022 走看看