標籤:des style blog http color io strong for ar
LeetCode: Clone Graph
Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.
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 by #.
- First node is labeled as
0. Connect node 0 to both nodes 1 and 2.
- Second node is labeled as
1. Connect node 1 to node 2.
- Third node is labeled as
2. Connect node 2 to node 2 (itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / / 0 --- 2 / \_/
地址:https://oj.leetcode.com/problems/clone-graph/
演算法:把整個圖複製下來,基本就是利用map來完成的,複製的過程採用遞迴完成。代碼:
1 /** 2 * Definition for undirected graph. 3 * struct UndirectedGraphNode { 4 * int label; 5 * vector<UndirectedGraphNode *> neighbors; 6 * UndirectedGraphNode(int x) : label(x) {}; 7 * }; 8 */ 9 class Solution {10 public:11 UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {12 if(!node){13 return NULL;14 }15 map<int,UndirectedGraphNode *> hash_table;16 set<int> isTraved;17 return subClone(node,hash_table,isTraved);18 }19 UndirectedGraphNode *subClone(UndirectedGraphNode *node, map<int,UndirectedGraphNode*> &hash_table, set<int> &isTraved){20 if(!node){21 return NULL;22 }23 int label = node->label;24 if(isTraved.find(label) != isTraved.end()){25 return hash_table[label];26 }27 if(hash_table.find(label) == hash_table.end()){28 hash_table[label] = new UndirectedGraphNode(label);29 }30 isTraved.insert(label);31 UndirectedGraphNode *p = hash_table[label];32 vector<UndirectedGraphNode *>::iterator it = node->neighbors.begin();33 for(; it != node->neighbors.end(); ++it){34 p->neighbors.push_back(subClone(*it,hash_table,isTraved));35 }36 return p;37 }38 };
LeetCode: Clone Graph