leetcode_题解_Clone Graph
2014-10-27 10:04
357 查看
Clone an undirected graph. Each node in the graph contains a
labeland a list of its
neighbors.OJ's undirected graph serialization:Nodes are labeled uniquely.We use
#as a separator for each node, and
,asa 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
0toboth nodes
1and
2.Second node is labeled as
1. Connect node
1tonode
2.Third node is labeled as
2. Connect node
2tonode
2(itself), thus forming a self-cycle.Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/
思路:先bfs仅仅复制数值,并且生成一个映射表map;然后再bfs一下将各个节点链接起来。
/*** Definition for undirected graph.* struct UndirectedGraphNode {* int label;* vector<UndirectedGraphNode *> neighbors;* UndirectedGraphNode(int x) : label(x) {};* };*/class Solution {public:void bfsCopyVal(UndirectedGraphNode *node, map<UndirectedGraphNode*,UndirectedGraphNode*> &addrMap){if(node==NULL)return ;map<UndirectedGraphNode*,bool> visMap;queue<UndirectedGraphNode*> nodeQueue;nodeQueue.push(node);while(!nodeQueue.empty()){UndirectedGraphNode *tmp=nodeQueue.front();nodeQueue.pop();//出队头UndirectedGraphNode *nNode=new UndirectedGraphNode(tmp->label);addrMap[tmp]=nNode;//建立旧到新的节点映射if(visMap[tmp]!=true){visMap[tmp]=true;for(vector<UndirectedGraphNode*>::iterator iter1=tmp->neighbors.begin(); iter1!=tmp->neighbors.end(); iter1++){nodeQueue.push(*iter1);//入队尾}}}}void bfsLinkNode(UndirectedGraphNode *node, map<UndirectedGraphNode*,UndirectedGraphNode*> &addrMap){if(node==NULL)return ;map<UndirectedGraphNode*,bool> visMap;queue<UndirectedGraphNode*> nodeQueue;nodeQueue.push(node);while(!nodeQueue.empty()){UndirectedGraphNode *tmp=nodeQueue.front();nodeQueue.pop();//出队头if(visMap[tmp]!=true){visMap[tmp]=true;vector<UndirectedGraphNode*> nVec;for(vector<UndirectedGraphNode*>::iterator iter1=tmp->neighbors.begin(); iter1!=tmp->neighbors.end(); iter1++){nodeQueue.push(*iter1);//入队尾nVec.push_back(addrMap[*iter1]);}addrMap[tmp]->neighb4000ors=nVec;}}}UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {map<UndirectedGraphNode*,UndirectedGraphNode*> addrMap;bfsCopyVal(node,addrMap);bfsLinkNode(node,addrMap);return addrMap[node];}};
相关文章推荐
- LeetCode题解:Clone Graph
- LeetCode | Clone Graph
- Clone Graph leetcode
- Clone Graph Leetcode 133
- 133 Clone Graph [Leetcode]
- Leetcode Clone Graph
- [LeetCode]Copy List with Random Pointer &Clone Graph 复杂链表的复制&图的复制
- LeetCode:Clone Graph
- Clone Graph [Leetcode解题报告]
- Java for LeetCode 133 Clone Graph
- leetcode Clone Graph
- LeetCode 133 Clone Graph
- Leetcode: Clone Graph
- 【leetcode】Clone Graph(python)
- [LeetCode] Clone Graph
- leetcode[133]Clone Graph
- LeetCode "Clone Graph"
- leetcode Clone Graph
- *Leetcode 133. Clone Graph DFS
- Leetcode---Clone Graph