LeetCode133.Clone Graph
来源:互联网 发布:app p图软件 编辑:程序博客网 时间:2024/06/06 02:32
题目
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或DFS
遍历到一个节点A时,我们需要往A的副本A*中添加A的相邻节点B C D的副本B* C* D*
- 如果A是第一次被遍历,我们可以直接创建其副本
- 如果A是被多次遍历时,我们需要找到其之前被创建的副本
因此,我采用一个map<原节点,该节点副本>来记录所有创建出来的节点副本,这样上面第2步操作起来就方便很多了。
代码
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */class Solution {public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { unordered_map<UndirectedGraphNode *, UndirectedGraphNode *> nodeMap; UndirectedGraphNode * clone; queue<UndirectedGraphNode *> queue; if(node) { clone = new UndirectedGraphNode(node->label); nodeMap[node] = clone; queue.push(node); } else return nullptr; //采用BFS while(!queue.empty()) { UndirectedGraphNode * curr = queue.front(); vector<UndirectedGraphNode *> currNgbs = curr->neighbors; queue.pop(); for(int i = 0; i < currNgbs.size(); i++) { //在map找不到该节点,需要创建其副本,并且没有副本说明它之前还没被访问,也需要加进queue继续BFS if(nodeMap.find(currNgbs[i]) == nodeMap.end()) { nodeMap[currNgbs[i]] = new UndirectedGraphNode(currNgbs[i]->label); queue.push(currNgbs[i]); } (nodeMap[curr]->neighbors).push_back(nodeMap[currNgbs[i]]); } } return clone; }};
阅读全文
0 0
- 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
- 什么是Spring的MVC框架?
- 9月24日训练笔记
- JAVA Spring web mvc 学习 之 7:文件上\下传
- 2017/9/24 训练总结
- 第四周——项目五—猴子选大王
- LeetCode133.Clone Graph
- ucos-iii学习之优先级
- 西瓜书《机器学习》课后答案——chapter5_5.7
- Docker 中 openjdk 容器里无法使用 JDK 的 jmap 等命令的问题
- 给定排好序的数组A,大小为n,现给定数X,判断A中是否存在两数之和等于X
- JDK容器学习之HashMap (二) : 读写逻辑详解
- Python 3.6笔记开篇-------普通变量类型
- P2P原理简介
- CDH5.12.1版本搭建记录