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 };