标签:des style color io os ar for sp div
Clone an undirected graph. Each node in the graph contains a label
and
a list of its neighbors
.
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 #
.
0
.
Connect node 0
to both nodes 1
and 2
.1
.
Connect node 1
to node 2
.2
.
Connect node 2
to node 2
(itself),
thus forming a self-cycle.Visually, the graph looks like the following:
1 / / 0 --- 2 / \_/
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */ struct UndirectedGraphNode { int label; std::vector<UndirectedGraphNode *> neighbors; UndirectedGraphNode(int x) : label(x) {}; }; class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { std::unordered_map<UndirectedGraphNode*, UndirectedGraphNode *> map; if(node == NULL) return node; return dfs(node,map); } private: UndirectedGraphNode *dfs(UndirectedGraphNode *node,std::unordered_map<UndirectedGraphNode *, UndirectedGraphNode *> &map) { if(map.count(node) > 0) return map[node]; UndirectedGraphNode *newNode = new UndirectedGraphNode(node->label); map[node] = newNode; for(int i = 0; i < node->neighbors.size(); i++) { newNode->neighbors.push_back(dfs(node->neighbors[i],map)); } return newNode; } };
标签:des style color io os ar for sp div
原文地址:http://blog.csdn.net/akibatakuya/article/details/39611017