设为首页 加入收藏

TOP

Clone Graph [leetcode] dfs和bfs
2015-07-20 17:31:56 来源: 作者: 【 】 浏览:2
Tags:Clone Graph leetcode dfs bfs

变量unordered_map cloneMap;

因为会有环,所以需要cloneMap记录旧的节点和新的节点对。

还需要一个visited记录已经访问过的节点,可以和cloneMap合并在一起。


DFS:

在克隆某个Node时,首先放入map中。

之后遍历neighbors。如果neighbors不在map里,即没有访问过,则递归调用cloneGraph函数。

最后返回克隆过的节点。

    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
        if (node == NULL) return NULL;
        if (cloneMap.find(node) != cloneMap.end()) 
            return cloneMap[node];
        cloneMap[node] = new UndirectedGraphNode(node->label);
        cloneMap[node]->neighbors = vector
  
   ();
        for (int i = 0; i < node->neighbors.size(); i++)
        {
            UndirectedGraphNode * curNode = node->neighbors[i];
            UndirectedGraphNode * newNode = cloneGraph(curNode);
            cloneMap[node]->neighbors.push_back(newNode);
        }
        return cloneMap[node];
    }
  

BFS:

使用一个queue记录要访问的节点。

因为不能在访问queue中节点的时候再创建对应的node==>因为在处理父亲节点的时候需同时创建好其neighbors

所以需要在将不在map中的neighbors(没有访问过的子节点)放入queue的同时创建克隆的节点,并且放入map里。

    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
        if (node == NULL) return NULL;
        vector
  
    queue;
        queue.push_back(node);
        cloneMap[node] = new UndirectedGraphNode(node->label);
        cloneMap[node]->neighbors = vector
   
    (); for (int i = 0; i < queue.size(); i++) { UndirectedGraphNode * newNode = cloneMap[queue[i]]; for (int j = 0; j < queue[i]->neighbors.size(); j++) { UndirectedGraphNode * curNb = queue[i]->neighbors[j]; if (cloneMap.find(curNb) == cloneMap.end()) { queue.push_back(curNb); UndirectedGraphNode * newNb = new UndirectedGraphNode(curNb->label); newNb->neighbors = vector
    
     (); cloneMap[curNb] = newNb; } newNode->neighbors.push_back(cloneMap[curNb]); } } return cloneMap[node]; }
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1124 Factorial (??) 下一篇Sort List[leetcode] 由归并排序..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)