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)
    
  • 相关阅读:
    SQL优化大全
    程序的装入和链接
    Linux系统管理常用命令
    作业、进程、线程
    MySQL优化大全
    Linux系统结构 详解
    NoSQL数据库探讨
    操作系统内存管理——分区、页式、段式管理
    进程调度算法
    操作系统文件管理
  • 原文地址:https://www.cnblogs.com/absolute/p/5675803.html
Copyright © 2011-2022 走看看