LeetCode | Clone Graph
来源:互联网 发布:windows安装程序 编辑:程序博客网 时间:2024/05/21 12:39
题目:
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 node0
to both nodes1
and2
. - Second node is labeled as
1
. Connect node1
to node2
. - Third node is labeled as
2
. Connect node2
to node2
(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/
思路:
首先做一次BFS遍历,将所有结点创建出来。并且要保存在一个可以在短时间读取的结构中。map是个不错的结构并且每个结点label唯一,因此我们可以用label来作为索引。
第二次遍历的时候可以快速地找出结点并构造图的关系。
代码:
/** * 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; } map<int, UndirectedGraphNode*> nodes; queue<UndirectedGraphNode*> q; q.push(node); while(!q.empty()) { UndirectedGraphNode* tmp = q.front(); q.pop(); if(nodes.find(tmp->label)==nodes.end()) { UndirectedGraphNode* new_node = new UndirectedGraphNode(tmp->label); nodes.insert(pair<int, UndirectedGraphNode*>(new_node->label, new_node)); for(int i=0;i<tmp->neighbors.size();i++) { q.push(tmp->neighbors[i]); } } } q.push(node); while(!q.empty()) { UndirectedGraphNode* tmp = q.front(); q.pop(); UndirectedGraphNode* existingnode = nodes[tmp->label]; if(existingnode->neighbors.empty()&&!tmp->neighbors.empty()) { for(int i=0;i<tmp->neighbors.size();i++) { existingnode->neighbors.push_back(nodes[tmp->neighbors[i]->label]); q.push(tmp->neighbors[i]); } } } return nodes[node->label]; }};
0 0
- LeetCode[Graph]: Clone Graph
- [LeetCode] CLone Graph
- LeetCode:Clone Graph
- [leetcode]Clone Graph
- Leetcode: Clone Graph
- [LeetCode] Clone Graph
- LeetCode题解:Clone Graph
- [LeetCode]Clone Graph
- leetcode Clone Graph
- leetcode-Clone Graph
- LeetCode | Clone Graph
- Leetcode: Clone Graph
- [LeetCode] Clone Graph
- LeetCode OJ:Clone Graph
- Leetcode Clone Graph
- [Leetcode] Clone Graph (Java)
- Clone Graph - LeetCode
- 【leetcode】Clone Graph
- OD环境搭建
- libpng用法,读写PNG图像
- Python与开源GIS:使用OGR生成几何要素对象
- Linux信号通讯
- hdu 2050 折线分割平面
- LeetCode | Clone Graph
- Eclipse 实用配置整理
- zend framework 运行原理(2)
- ubuntu下设定系统locale,支持中文zh_CN.UTF-8
- 10 款最好的远程桌面软件
- XAMPP Apache 配置多端口和多域名方法
- 网络监控2013:IP Camera民用市场暴增
- Hadoop生态系统--序言
- hdu 1003 Max Sum