1. Clone Graph

BFS:

 1 class Solution {
 2 public:
 3     typedef UndirectedGraphNode UGNode;
 4     UndirectedGraphNode* cloneGraph(UndirectedGraphNode* node) {
 5         if (node == NULL) {
 6             return NULL;
 7         }
 8         vector<UGNode*> nodes;
 9         unordered_map<UGNode*, UGNode*> umap;
10         
11         //clone nodes only
12         nodes.push_back(node);
13         umap[node] = new UGNode(node->label);
14         int start = 0;
15         while (start < nodes.size()) {
16             UGNode* tmp = nodes[start];
17             start++;
18             for (int i = 0; i < tmp->neighbors.size(); i++) {
19                 if (umap.count(tmp->neighbors[i]) == 0) {
20                     nodes.push_back(tmp->neighbors[i]);
21                     umap[tmp->neighbors[i]] = new UGNode(tmp->neighbors[i]->label);
22                 }
23             }
24         }
25         
26         //clone neighbors only
27         for (int i = 0; i < nodes.size(); i++) {
28             UGNode* newNode = umap[nodes[i]];
29             for (int j = 0; j < nodes[i]->neighbors.size(); j++) {
30                 newNode->neighbors.push_back(umap[nodes[i]->neighbors[j]]);    
31             }
32         }
33         return umap[node];
34     }
35 };
View Code

相关文章: