Clone Graph [Leetcode解题报告]
来源:互联网 发布:中国移动两张网络建设 编辑:程序博客网 时间:2024/05/28 23:09
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 node 0 to both nodes 1 and 2.
Second node is labeled as 1. Connect node 1 to node 2.
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 / \ \_/
这道题我主要用的是BFS方法,利用map标记新图的node。在此题中我用的map<int,UndirectedGraphNode*>
(代码1),也可以用map<UndirectedGraphNode*,UndirectedGraphNode*>
,后面那个更快些,也烧脑一些,见代码2:
代码1:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { queue<UndirectedGraphNode*> q_ori; UndirectedGraphNode *newNode=NULL,*temp=NULL,*p=NULL; unordered_map<int,UndirectedGraphNode*> m; int temp_label=0; if(node==NULL)return NULL; temp_label=node->label; newNode=new UndirectedGraphNode(temp_label); m[temp_label]=newNode; q_ori.push(node); while(!q_ori.empty()){ temp=q_ori.front(); temp_label=temp->label; q_ori.pop(); newNode=m[temp_label]; for(int i=0;i<temp->neighbors.size();i++){ int temp_nei_label=temp->neighbors[i]->label; if(m.find(temp_nei_label)==m.end()){ p=new UndirectedGraphNode(temp_nei_label); newNode->neighbors.push_back(p); m[temp_nei_label]=p; q_ori.push(temp->neighbors[i]); }else{ newNode->neighbors.push_back(m[temp_nei_label]); } } } return m[node->label]; }
代码2:
unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> hash; UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if (!node) return node; if(hash.find(node) == hash.end()) { hash[node] = new UndirectedGraphNode(node -> label); for (auto x : node -> neighbors) { (hash[node] -> neighbors).push_back( cloneGraph(x) ); } } return hash[node]; }
- 【LeetCode】Clone Graph 解题报告
- Clone Graph [Leetcode解题报告]
- leetCode解题报告之Clone Graph
- [leetcode] 133. Clone Graph 解题报告
- [Leetcode] 133. Clone Graph 解题报告
- [leetcode]133. Clone Graph@Java解题报告
- Clone Graph解题报告
- LeetCode[Graph]: Clone Graph
- [leetcode] 261. Graph Valid Tree 解题报告
- [Leetcode] 261. Graph Valid Tree 解题报告
- [LeetCode] CLone Graph
- LeetCode:Clone Graph
- [leetcode]Clone Graph
- Leetcode: Clone Graph
- [LeetCode] Clone Graph
- LeetCode题解:Clone Graph
- [LeetCode]Clone Graph
- leetcode Clone Graph
- sql isnull函数的使用
- spring 注解定时任务
- 微软2011年成功破获一起DNS劫持的数字犯罪案件
- 缓冲加载图片的 jQuery 插件 lazyload.js 使用方法详解
- js
- Clone Graph [Leetcode解题报告]
- PagerSlidingTabStrip使用问题大合集
- 备忘录
- 文本框只能输入数字。
- 冒泡排序
- 做人做事
- js中的alert()弹出乱码
- 菜单的权限
- dede织梦CMS调用全站文章方法