Clone Graph
2014-01-28 01:59
555 查看
Clone Graph
Total Accepted: 4644 TotalSubmissions: 23154My SubmissionsClone an undirected graph. Each node in the graph contains alabelanda list of its
neighbors.OJ's undirected graph serialization:Nodes are labeled uniquely.We use
#as a separator for each node, and
,asa 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
0to both nodes
1and
2.Second node is labeled as
1.Connect node
1to node
2.Third node is labeled as
2.Connect node
2to node
2(itself),thus forming a self-cycle.Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/Discusssolution:Map<原始节点,克隆节点> 储存节点之间的联系,如果一个点在map中有,那么从map中取出,否则新建Node.BFS 遍历 Graph如果此原始节点未被访问过,新建或从map中取节点.遍历原始节点的neighbors, 将neighbors 添加进新节点中.// BFSpublic class CloneGraph {public static UndirectedGraphNode cloneGraph(UndirectedGraphNode node){if(node == null) return null;UndirectedGraphNode root = null;Map<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>();Set<UndirectedGraphNode> set = new HashSet<>();Queue<UndirectedGraphNode> queue = new LinkedList<>();queue.add(node);while(!queue.isEmpty()){UndirectedGraphNode n = queue.poll();if(set.contains(n)) continue;set.add(n);UndirectedGraphNode cloned = null;if(map.containsKey(n)) cloned = map.get(n);else{cloned = new UndirectedGraphNode(n.label);map.put(n,cloned);}for(UndirectedGraphNode neighbor: n.neighbors){queue.add(neighbor);UndirectedGraphNode clonedNeighbor = null;if(map.containsKey(neighbor)) clonedNeighbor = map.get(neighbor);else{clonedNeighbor = new UndirectedGraphNode(neighbor.label);map.put(neighbor,clonedNeighbor);}cloned.neighbors.add(clonedNeighbor);}if(root == null) root = cloned;}return root;}}
// DFSpublic UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {if(node == null)return null;return clone(node,new HashMap<UndirectedGraphNode, UndirectedGraphNode>(), new HashSet<UndirectedGraphNode>());}private static UndirectedGraphNode clone(UndirectedGraphNode node, Map<UndirectedGraphNode, UndirectedGraphNode> map, Set <UndirectedGraphNode> visitedSet){if(visitedSet.contains(node))return null;visitedSet.add(node);UndirectedGraphNode clonedNode;if(!map.containsKey(node)){clonedNode = new UndirectedGraphNode(node.label);map.put(node,clonedNode);}else{clonedNode = map.get(node);}for(UndirectedGraphNode n: node.neighbors){if(map.containsKey(n)){clonedNode.neighbors.add(map.970aget(n));}else{UndirectedGraphNode newNode = new UndirectedGraphNode(n.label);clonedNode.neighbors.add(newNode);map.put(n,newNode);}clone(n,map,visitedSet);}return clonedNode;}
相关文章推荐
- Clone Graph
- Clone Graph
- Clone Graph(LeetCode)
- Clone Graph
- leetcode:Clone Graph
- 算法设计Week3 LeetCode Algorithms Problem #133 Clone Graph
- [LeetCode]Clone Graph
- LeetCode——Clone Graph
- Clone Graph
- LeetCode Clone Graph
- Leetcode 133. Clone Graph
- Clone Graph
- leetcode-Clone Graph
- LeetCode OJ - Clone Graph
- Clone Graph
- [LeetCode] clone graph
- [LeetCode]题解(python):133-Clone Graph
- [week 18][Leetcode] Clone Graph
- Clone Graph 图的复制 @LeetCode
- 【LeetCode】Clone Graph