- Quetion:
Clone an undirected graph. Each node in the graph contains a
labeland a list of itsneighbors.
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 node0to both nodes1and2.- Second node is labeled as
1. Connect node1to node2.- Third node is labeled as
2. Connect node2to node2(itself), thus forming a self-cycle.Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/
- Analysis:
使用广度优先遍历或者深度优先遍历都可以。
- Code:
DFS:
class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if(node == nullptr) return nullptr; // key is original node value is copied node unordered_map<const UndirectedGraphNode *,UndirectedGraphNode *> copied; clone(node, copied); return copied[node]; } private: // DFS static UndirectedGraphNode* clone(const UndirectedGraphNode *node,unordered_map<const UndirectedGraphNode *,UndirectedGraphNode *> &copied) { // a copy already exists if (copied.find(node) != copied.end()) return copied[node]; UndirectedGraphNode *new_node = new UndirectedGraphNode(node->label); copied[node] = new_node; for (auto nbr : node->neighbors) new_node->neighbors.push_back(clone(nbr, copied)); return new_node; } };
本文介绍了一种基于深度优先搜索(DFS)的无向图克隆算法,该算法能够复制给定无向图的每个节点及其邻居。通过实例解释了无向图的序列化方式,并提供了详细的代码实现。
3318

被折叠的 条评论
为什么被折叠?



