您的位置:首页 > 其它

Clone Graph

2016-02-15 21:13 316 查看

题目



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
/ \
\_/




方法


主要分两步:第一步创建全部的结点。第二步,创建结点的neighbors
/**
* Definition for undirected graph.
* class UndirectedGraphNode {
*     int label;
*     List<UndirectedGraphNode> neighbors;
*     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if (node == null) {
return null;
}
Map<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>();
Map<Integer, UndirectedGraphNode> graph = new HashMap<Integer, UndirectedGraphNode>();
Queue<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
queue.offer(node);
while(!queue.isEmpty()) {
UndirectedGraphNode temp = queue.poll();

if (!map.containsKey(temp.label)) {
UndirectedGraphNode newTemp = new UndirectedGraphNode(temp.label);
graph.put(temp.label, temp);
map.put(temp.label, newTemp);
}

for (UndirectedGraphNode neighbor : temp.neighbors) {
if (!map.containsKey(neighbor.label)) {
queue.offer(neighbor);
}
}
}
for (int label : graph.keySet()) {
UndirectedGraphNode temp = graph.get(label);
UndirectedGraphNode cloneTemp = map.get(temp.label);
for (UndirectedGraphNode neighbor : temp.neighbors) {
cloneTemp.neighbors.add(map.get(neighbor.label));
}
}
return map.get(node.label);
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: