Clone Graph
2014-08-12 22:12
162 查看
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.
思路:使用BFS遍历无向图。使用map记录原始节点和新节点的地址映射,使用set记录已经完成复制操作的节点地址。
查找map,确定是否需要对当前节点进行new操作,若是,对其进行new操作,并将地址映射存入map。
查找set,确定是否已经完成了对当前节点的复制操作,若否,则表明需要更新其对应新节点的邻居信息。遍历当前节点的邻居向量,若某一邻居尚未被new出,则对其进行new操作,并将地址映射存入map,同时将新地址存入当前节点对应新节点的邻居向量中。
思路:使用BFS遍历无向图。使用map记录原始节点和新节点的地址映射,使用set记录已经完成复制操作的节点地址。
查找map,确定是否需要对当前节点进行new操作,若是,对其进行new操作,并将地址映射存入map。
查找set,确定是否已经完成了对当前节点的复制操作,若否,则表明需要更新其对应新节点的邻居信息。遍历当前节点的邻居向量,若某一邻居尚未被new出,则对其进行new操作,并将地址映射存入map,同时将新地址存入当前节点对应新节点的邻居向量中。
class Solution { public: UndirectedGraphNode *cloneGraph( UndirectedGraphNode *node ) { if( !node ) { return 0; } list<UndirectedGraphNode*> nodeList; unordered_map<UndirectedGraphNode*,UndirectedGraphNode*> addrMap; unordered_set<UndirectedGraphNode*> accessedSet; nodeList.push_back( node ); while( !nodeList.empty() ) { UndirectedGraphNode *newNode = 0, *curr = nodeList.front(); nodeList.pop_front(); if( addrMap.find( curr ) != addrMap.end() ) { newNode = addrMap[curr]; } else { newNode = new UndirectedGraphNode( curr->label ); addrMap[curr] = newNode; } if( accessedSet.count( curr ) ) { continue; } for( size_t i = 0; i != curr->neighbors.size(); ++i ) { UndirectedGraphNode *newNeighbor = 0, *neighbor = curr->neighbors[i]; if( addrMap.find( neighbor ) != addrMap.end() ) { newNeighbor = addrMap[neighbor]; } else { newNeighbor = new UndirectedGraphNode( neighbor->label ); addrMap[neighbor] = newNeighbor; } newNode->neighbors.push_back( newNeighbor ); nodeList.push_back( neighbor ); } accessedSet.insert( curr ); } return addrMap[node]; } };
相关文章推荐
- CODE 130: Clone Graph
- leetcode Clone Graph
- 【LeetCode】Clone_Graph
- Problem Clone Graph
- 【leetcode】Clone Graph(python)
- Graph Clone(DFS)
- leetcode Clone Graph
- [LeetCode] Clone Graph
- Leetcode NO.133 Clone Graph
- [LeetCode] Clone Graph
- 【leetcode】clone-graph
- [LeetCode] Clone Graph, Solution
- LeetCode || Clone Graph
- LeetCode 19 Clone Graph
- leetcode Clone Graph
- leetcode-Clone Graph
- [leetcode 133]Clone Graph
- [LeetCode#133]Clone Graph
- Clone Graph
- [Leetcode]Clone Graph