LeetCode133. Clone Graph
来源:互联网 发布:手机网络锁原理 编辑:程序博客网 时间:2024/06/17 01:26
题目:
https://leetcode.com/problems/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 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记录原来图的节点和克隆图的节点情况,防止克隆过的节点再被new一次。每copy一个原节点,就把原节点与克隆节点放入map中,原节点与克隆节点对应。如果后面的遍历遇到在map中的原节点,表明这个原节点已经被copy过了,不用新new一个节点来再次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* cur=NULL; UndirectedGraphNode* start=NULL; UndirectedGraphNode* connect=NULL; queue<UndirectedGraphNode*> q; q.push(node); unordered_map<UndirectedGraphNode*,UndirectedGraphNode*> m; start=new UndirectedGraphNode (node->label); m[node]=start; while(!q.empty()){ cur=q.front(); q.pop(); int len=cur->neighbors.size(); for(int i=0;i<len;i++){ connect=cur->neighbors[i]; if(m.find(connect)==m.end()){ UndirectedGraphNode* nodeCopy=new UndirectedGraphNode(connect->label); m[connect]=nodeCopy; q.push(connect); } m[cur]->neighbors.push_back(m[connect]);//与原节点对应的克隆节点添加相邻节点 } } return start; }};
- LeetCode133. Clone Graph
- LeetCode133—Clone Graph
- leetcode133. Clone Graph
- LeetCode133 Clone Graph
- LeetCode133.Clone Graph
- LeetCode133——Clone Graph
- BFS和DFS解决LeetCode133. Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- 第四周【项目3-随机数函数应用于游戏】
- QR code API
- CSS行高——line-height 文本的垂直居中(display:block;情况下)
- Robot Motion
- 基于ViewDragHelper的抽屉控件
- LeetCode133. Clone Graph
- js弹出框、对话框、提示框、弹窗总结
- XMPP即时聊天步骤
- Java中的冒泡排序
- java中volatile 关键字
- 概率论与数理统计 Day.1
- 四大组件之 Activity及其生命周期
- 摘文路径地址
- 委派任务