146_leetcode_Clone Graph
来源:互联网 发布:如何小型扫描二维数据 编辑:程序博客网 时间:2024/04/29 01:15
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 / \ \_/
1:注意特殊情况, 图的value值唯一;2:图由邻接链表组成;3:对图进行两次BFS(广度优先遍历)第一次分别复制相应的节点,第二次获得相应节点的邻接矩阵
4:使用unorder_map结构来实现判断当前节点是否已经访问过。
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(node == NULL) { return NULL; } deque<UndirectedGraphNode *> myDeque; unordered_map<int, UndirectedGraphNode *> myMap; myDeque.push_back(node); while(!myDeque.empty()) { UndirectedGraphNode *tmpNode = myDeque.front(); myDeque.pop_front(); if(myMap.find(tmpNode->label) == myMap.end()) { UndirectedGraphNode *curNode = new UndirectedGraphNode(tmpNode->label); myMap[tmpNode->label] = curNode; for(int i = 0; i < (int)tmpNode->neighbors.size(); i++) { myDeque.push_back(tmpNode->neighbors[i]); } } } myDeque.push_back(node); while(!myDeque.empty()) { UndirectedGraphNode *tmpNode = myDeque.front(); myDeque.pop_front(); UndirectedGraphNode* curCloneNode = myMap[tmpNode->label]; if(!tmpNode->neighbors.empty() && curCloneNode->neighbors.empty()) { for(int i = 0; i < (int)tmpNode->neighbors.size(); i++) { myDeque.push_back(tmpNode->neighbors[i]); curCloneNode->neighbors.push_back(myMap[tmpNode->neighbors[i]->label]); } } } return myMap[node->label]; }
0 0
- 146_leetcode_Clone Graph
- graph
- Graph
- Graph
- graph
- Graph
- Graph
- Graph
- graph
- Graph
- Graph
- graph
- Graph
- Graph
- graph
- Graph
- Graph
- graph
- [C++/CLI编程宝典][1]C++/CLI资料汇总
- string 与char* char[]之间的转换
- 金盾软防CC防护方法设置
- 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
- libudev使用说明书
- 146_leetcode_Clone Graph
- i18n
- spring_tld描述文件
- 初探C++ 类中enum关键字的使用
- 包含min函数的栈[数据结构]
- Java IO流分析整理
- HDU——B-number(数位DP)
- 4548 美素数
- GridView的时候用到FindControl()在TemplateField中发现总是Find不到