Clone Graph Leetcode 133
来源:互联网 发布:java 泛型 构造函数 编辑:程序博客网 时间:2024/05/16 09:53
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 #.
1.First node is labeled as 0. Connect node 0 to both nodes 1 and 2.2.Second node is labeled as 1. Connect node 1 to node 2.3.Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \0 --- 2 / \ \_/
题目的要求是让我们实现一个图的拷贝。拷贝指的是复制另外一个对象到自己的对象中,且两者不共享一个内存区,所以我们需要new 来开辟新的内存区执行拷贝。
analysis:
在一次遍历中,完成拷贝的话,那就需要使用额外的内存来使用map存储源节点和拷贝节点之间的对应关系。有了这个关系之后,在遍历图的过程中,就可以同时处理访问节点及访问节点的拷贝节点,一次完成。
1.用unordered_map(node*,node*)这种结构,直接map[node]=nodeclone,较为简便。
2.BFS,变搜边向map添加元素.
3.用queue来存储要copy的节点
/** * 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 *copy=new UndirectedGraphNode(node->label); map<UndirectedGraphNode *,UndirectedGraphNode *>table; table[node]=copy; queue<UndirectedGraphNode *>visit; visit.push(node); while(!visit.empty()){ UndirectedGraphNode *cur=visit.front(); visit.pop(); for(int i=0;i<cur->neighbors.size();i++){ UndirectedGraphNode *neighbor=cur->neighbors[i]; if(table.find(neighbor)==table.end()){ UndirectedGraphNode *neighborclone=new UndirectedGraphNode(neighbor->label); table[neighbor]=neighborclone; visit.push(neighbor); } table[cur]->neighbors.push_back(table[neighbor]); } } return copy; }};
solution 2
class Solution { public: UndirectedGraphNode *clone(UndirectedGraphNode *node, map<int,UndirectedGraphNode *> &table) { if(node==NULL)return NULL; if(table.find(node->label)!=table.end())return table[node->label]; UndirectedGraphNode *copy=new UndirectedGraphNode(node->label); table[copy->label]=copy; for(int i=0;i<node->neighbors.size();i++){ UndirectedGraphNode *neighborclone=clone(node->neighbor[i],table); copy->neighbors.push_back(neighborclone); } return copy; } UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { map<int,UndirectedGraphNode *> visit; return clone(node,visit); }};
- LeetCode: Clone Graph [133]
- [leetcode 133]Clone Graph
- [leetcode] 133 Clone Graph
- LeetCode 133 Clone Graph
- leetcode || 133、Clone Graph
- Clone Graph Leetcode 133
- LeetCode(133) Clone Graph
- leetcode 133: Clone Graph
- Leetcode #133 Clone Graph
- 133 Clone Graph [Leetcode]
- LeetCode 133: Clone Graph
- Leetcode 133 Clone Graph
- Leetcode 133 Clone Graph
- LeetCode(133)Clone a Graph
- [leetcode] 133 clone graph bfs
- Leetcode NO.133 Clone Graph
- [Leetcode 133, Medium] Clone Graph
- LeetCode(133) Clone Graph
- Note on <Beginning Microsoft SQL Server 2012 Programming> - 01
- PHP+ajax 无刷新删除数据
- Python习题1:None-Unique Elements 习题+前三名答案解析(checkio.org)
- 查看linux是32还是64位
- Alwayson(1)——SQLServer2014的安装要求。
- Clone Graph Leetcode 133
- java 基础static关键字
- Flexbox布局
- [machine learning]clusteing algo and PCA
- poj 2409 Let it Bead 【poyla计数 打表】
- ThinkPHP3.2学习(2)入口文件
- vector和set的区别
- 图形学复习3——观察和裁剪
- php字符串处理函数大全