[LeetCode] Clone Graph
2014-07-18 14:46
260 查看
Clone an undirected graph. Each node in the graph contains a
OJ's undirected graph serialization:
Nodes are labeled uniquely.
We use
As an example, consider the serialized graph
The graph has a total of three nodes, and therefore contains three parts as separated by
First node is labeled as
Second node is labeled as
Third node is labeled as
Visually, the graph looks like the following:
labeland 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
0to both nodes
1and
2.
Second node is labeled as
1. Connect node
1to node
2.
Third node is labeled as
2. Connect node
2to node
2(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/ 思路:用map存储创建的新的结点,其中key是结点的label值,value是结点的指针值。
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */ class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(node==NULL) return NULL; UndirectedGraphNode *pnode = node; UndirectedGraphNode *head = new UndirectedGraphNode(node->label); UndirectedGraphNode *p = head; map<int,UndirectedGraphNode *> labelAndNode; labelAndNode[head->label] = head; pNodeNeighbors(pnode,p,labelAndNode); return head; } private: void pNodeNeighbors(UndirectedGraphNode *&pnode,UndirectedGraphNode *&p,map<int,UndirectedGraphNode *> &labelAndNode) { int num = pnode->neighbors.size(); UndirectedGraphNode *pnew ; for(int i = 0;i<num;i++) { if(labelAndNode.count(pnode->neighbors[i]->label)==0) { pnew = new UndirectedGraphNode(pnode->neighbors[i]->label); labelAndNode[pnode->neighbors[i]->label] = pnew; p->neighbors.push_back(pnew); pNodeNeighbors(pnode->neighbors[i],p->neighbors[i],labelAndNode); } else { pnew = labelAndNode[pnode->neighbors[i]->label]; p->neighbors.push_back(pnew); } } } };
相关文章推荐
- [leetcode] 133 clone graph bfs
- [LeetCode] Clone Graph
- [LeetCode] Clone Graph, Solution
- [leetcode] 133 Clone Graph
- LeetCode: Clone Graph
- [LeetCode][JavaScript]Clone Graph
- leetcode之Clone Graph
- leetcode -- Clone Graph
- LeetCode Clone Graph
- leetcode--Clone Graph
- Clone Graph -- LeetCode
- Clone Graph [LeetCode]
- [Leetcode 133, Medium] Clone Graph
- leetcode做题总结,题目Clone Graph 133
- LeetCode------clone-graph
- 【leetcode】clone-graph
- [leetcode] Clone Graph
- 【Leetcode】 Clone Graph
- leetcode:clone graph
- leetcode Clone Graph