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 node0to both nodes1and2. - Second node is labeled as
1. Connect node1to node2. - Third node is labeled as
2. Connect node2to node2(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1
/ \
/ \
0 --- 2
/ \
\_/
/*struct UndirectedGraphNode {
int label;
vector<UndirectedGraphNode *> neighbors;
UndirectedGraphNode(int x) : label(x) {};
};*/
class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(node == NULL) return NULL;
map<UndirectedGraphNode*,UndirectedGraphNode*> map0;
queue<UndirectedGraphNode*> queue0;
UndirectedGraphNode *ret = new UndirectedGraphNode(node->label),*p = ret;
map<UndirectedGraphNode *,UndirectedGraphNode*>::iterator it ;
map0[node] = ret;
queue0.push(node);
while(!queue0.empty())
{
node = queue0.front();
queue0.pop();
p = map0[node];
for(int i = 0;i<node->neighbors.size();i++)
{
it = map0.find(node->neighbors[i]);
if(it == map0.end()){
UndirectedGraphNode *cur = new UndirectedGraphNode(node->neighbors[i]->label);
map0[node->neighbors[i]] = cur;
p->neighbors.push_back(cur);
queue0.push(node->neighbors[i]);
}else{
p->neighbors.push_back(it->second);
}
}
}
return ret;
}
};
252 ms
3060

被折叠的 条评论
为什么被折叠?



