Clone an undirected graph. Each node in the graph contains alabeland 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 by#.
First node is labeled as0. Connect node0to both nodes1and2. Second node is labeled as1. Connect node1to node2. Third node is labeled as2. Connect node2to node2(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/
C++
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */ class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node){ unordered_map<int, UndirectedGraphNode*> umap; return clone(node, umap); } UndirectedGraphNode *clone(UndirectedGraphNode *node, unordered_map<int, UndirectedGraphNode*> &umap) { if (!node) return node; if (umap.count(node->label)) return umap[node->label]; UndirectedGraphNode *newNode = new UndirectedGraphNode(node->label); umap[node->label] = newNode; for (int i = 0; i < node->neighbors.size(); ++i){ (newNode->neighbors).push_back(clone(node->neighbors[i],umap)); } return newNode; } };
转载于:https://www.cnblogs.com/vercont/p/10210287.html
相关资源:JAVA上百实例源码以及开源项目