Do not sway, find the right direction
[Problem description]
Clone an undirected graph. each node in the graph containslabelAnd a list of itsneighbors.
OJ's undirected graph serialization:
Nodes are labeled uniquely.
We use
#As a separator for each node, and
,As a separator for node label and each neighbor of the node.
As an example, consider the serialized Graph{0,1,2#1,2#2,2}.
The graph has a total of three nodes, and therefore contains three parts as separated#.
- First node is labeled
0. Connect Node0To both nodes1And2.
- Second node is labeled
1. Connect Node1To Node2.
- Third node is labeled
2. Connect Node2To Node2(Itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 // 0 --- 2 /\_/
[Solutions]
Deep priority Traversal
1 UndirectedGraphNode *Solution::cloneGraph(UndirectedGraphNode *node){ 2 if (node == NULL) 3 return NULL; 4 map<UndirectedGraphNode*, UndirectedGraphNode*> visited; 5 queue<UndirectedGraphNode*> bfs_q; 6 visited[node] = new UndirectedGraphNode(node->label); 7 bfs_q.push(node); 8 while(!bfs_q.empty()){ 9 UndirectedGraphNode* tmp = bfs_q.front(); bfs_q.pop();10 for (auto k : tmp->neighbors){11 if (visited.find(k) == visited.end()){12 UndirectedGraphNode* t = new UndirectedGraphNode(k->label);13 visited[k] = t;14 visited[tmp]->neighbors.push_back(t);15 bfs_q.push(k);16 }17 else{18 visited[tmp]->neighbors.push_back(visited[k]);19 }20 }21 }22 return visited[node];23 }
Leetcode -- clone Graph