/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector<UndirectedGraphNode *> neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(node == NULL) return NULL;
map<UndirectedGraphNode *, UndirectedGraphNode *> hasCopied;
queue<UndirectedGraphNode *> uncompleteCopied;
hasCopied[node] = new UndirectedGraphNode(node->label);
//hasCopied[NULL] = NULL;
uncompleteCopied.push(node);
while(!uncompleteCopied.empty())
{
UndirectedGraphNode* pCurNode = uncompleteCopied.front();
uncompleteCopied.pop();
for(int i = 0; i < pCurNode->neighbors.size(); ++i)
{
UndirectedGraphNode* pNeighborNode = pCurNode->neighbors[i];
if(hasCopied.find(pNeighborNode) != hasCopied.end())
hasCopied[pCurNode]->neighbors.push_back(hasCopied[pNeighborNode]);
else
{
hasCopied[pNeighborNode] = new UndirectedGraphNode(pNeighborNode->label);
hasCopied[pCurNode]->neighbors.push_back(hasCopied[pNeighborNode]);
uncompleteCopied.push(pNeighborNode);
}
}
}
return hasCopied[node];
}
};[LeetCode]Clone Graph
图深拷贝算法
最新推荐文章于 2020-10-14 08:47:12 发布
本文介绍了一种用于无向图的深拷贝算法,通过广度优先搜索遍历图中的每个节点,并创建新的节点和边来复制原始图的结构。
448

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



