[LeetCode] Clone Graph
来源:互联网 发布:java中交换两个数 编辑:程序博客网 时间:2024/05/17 03:41
Clone Graph
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 / \ \_/
解题思路:
题意为拷贝图。我们可以用一个map来存储新图的标签到节点指针的映射关系。同时,用一个队列来存储待确定邻居的节点(原图节点指针,因为我们通过指针标签很容易找到新图节点指针)。
/** * 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*> nodeMap; //存的是新图的标签到节点指针对 queue<UndirectedGraphNode*> nodeQ; //存的是原图的节点指针 UndirectedGraphNode* newNode = new UndirectedGraphNode(node->label); nodeMap[node->label] = newNode; nodeQ.push(node); while(!nodeQ.empty()){ UndirectedGraphNode* n = nodeQ.front(); nodeQ.pop(); for(int i=0; i<n->neighbors.size(); i++){ if(nodeMap.find(n->neighbors[i]->label) == nodeMap.end()){ nodeMap[n->neighbors[i]->label] = new UndirectedGraphNode(n->neighbors[i]->label); nodeQ.push(n->neighbors[i]); } nodeMap[n->label]->neighbors.push_back(nodeMap[n->neighbors[i]->label]); } } return newNode; }};
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
- linux 进程间通信 消息队列
- ehcache集群详解一(支持的集群类型)
- Jetty的SelectChannelConnector分析
- 解决PL/SQL Developer 连接oracle 11g 64位中的问题
- 084 Largest Rectangle in Histogram [Leetcode]
- [LeetCode] Clone Graph
- Java NIO系列教程(八) SocketChannel
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)
- JAVA语言的特点:C++--
- weblogic12.1.3的安装及更新
- Xcode相关及Xib封装之论述
- 【Android高级】Android系统以及Activity启动讲解
- tabix
- [150816][C#]C#基础知识——字符串