1 题目描述
题目描述 本题要求复制一个无向图,图中每个节点都包含一个标签和它的邻居列表 我们无向图用以下的方法序列化:
节点的标签是互不相同的,我们使用“#”作为节点之间的分隔符,使用“,”作为节点标签和节点的节点邻居的分隔符。 例如:现在有一个序列化的无向图{0,1,2#1,2#2,2}. 这个无向图一共有3个节点,因此序列被#分隔成三部分
第一个节点的标签是0,节点0和节点1,节点2之间有边第二个节点的标签是1,节点1和节点2之间有边第三个节点的标签是2,节点2和节点2(它自己)之间有边,形成了自环
2 解题思路
广度优先遍历
3 代码实现
typedef UndirectedGraphNode UGN
;
class Solution {
public:
UGN
*cloneGraph(UGN
*node
) {
if(node
== NULL)
return NULL;
map
<int, UGN
*> m
;
queue
<UGN
*> q
;
UGN
*firstCopyNode
= new UGN(node
->label
);
m
[firstCopyNode
->label
] = firstCopyNode
;
q
.push(node
);
while(!q
.empty()){
UGN
*front
= q
.front();
q
.pop();
for(UGN
*neighbor
: front
->neighbors
){
if(m
.find(neighbor
->label
) == m
.end()){
UGN
*newCopyNode
= new UGN(neighbor
->label
);
m
[neighbor
->label
] = newCopyNode
;
q
.push(neighbor
);
}
m
[front
->label
]->neighbors
.push_back(m
[neighbor
->label
]);
}
}
return firstCopyNode
;
}
};
4 运行结果
运行时间:6ms 占用内存:760k