标签:rate span for cond add 不能 size list rmi
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 / \_/
克隆问题常常用hashMap, 关键在于如何从一个点设置遍历, 此处用list, 不断遍历, 不断list. get(start++) ,再通过neighbour来获取新的node.
/**
* 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) {
// write your code here
if (node == null) {
return node;
}
HashMap<UndirectedGraphNode, UndirectedGraphNode> map =
new HashMap<UndirectedGraphNode, UndirectedGraphNode> ();
ArrayList<UndirectedGraphNode> nodes = new ArrayList<UndirectedGraphNode>();
//copy nodes
nodes.add(node);
map.put(node, new UndirectedGraphNode(node.label));
int start = 0;
while (start < nodes.size()) {
UndirectedGraphNode head = nodes.get(start++);
for (UndirectedGraphNode n : head.neighbors) {
if (!map.containsKey(n)) {
map.put(n, new UndirectedGraphNode(n.label));
// 对nodes进行了add因此不能用foreach
nodes.add(n);
}
}
}
//copy neighbors
for (UndirectedGraphNode i : nodes) {
UndirectedGraphNode newNode = map.get(i);
for (UndirectedGraphNode j : i.neighbors) {
newNode.neighbors.add(map.get(j));
}
}
return map.get(node);
}
}
标签:rate span for cond add 不能 size list rmi
原文地址:http://www.cnblogs.com/apanda009/p/7225763.html