标签:des style color io ar java strong for sp
Clone an undirected graph. Each node in the graph contains a label and a list of its
neighbors.
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
#.
0. Connect node
0 to both nodes 1 and
2.1. Connect node
1 to node 2.2. Connect node
2 to node 2 (itself), thus forming a self-cycle.Visually, the graph looks like the following:
1
/ / 0 --- 2
/ \_/
/**
* 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 node;
}
LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
Map<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>();
Set<Integer> deal = new HashSet<Integer>();
queue.add(node);
while (queue.size() > 0)
{
UndirectedGraphNode p = queue.poll();
for (UndirectedGraphNode neighbor : p.neighbors)
{
if (!map.containsKey(neighbor.label))
{
queue.add(neighbor);
}
}
map.put(p.label, new UndirectedGraphNode(p.label));
}
queue.add(node);
while (queue.size() > 0)
{
UndirectedGraphNode p = queue.poll();
if(deal.contains(p.label))
{
continue;
}
for (UndirectedGraphNode neighbor : p.neighbors)
{
map.get(p.label).neighbors.add(map.get(neighbor.label));
if (!deal.contains(neighbor.label))
{
queue.add(neighbor);
}
}
deal.add(p.label);
}
return map.get(node.label);
}
}标签:des style color io ar java strong for sp
原文地址:http://blog.csdn.net/jiewuyou/article/details/39694429