您的位置:首页 > 其它

LeetCode Clone Graph

2015-03-20 18:23 295 查看
After I realizing that if I take an interview, I will need to discuss the problem in English, I begin to describe all my answers in English. And I hope this will also improve my written ability.

Description:

Given a graph, and we need to clone the whole graph, including an integer variable and an arraylist variable, referring to other nodes in the graph.

Method:

This problem is very similar to the cloned list with random index.

We can use a hashmap to get all the old nodes to map to the new nodes. Then we use a bfs to copy all the neighbour-relatioships.

ps. At first, I used a system stack and a stack overflow happens. So we have to write a stack on our own or simply using a queue.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class Solution {

public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if (node == null)
return null;

// bfs
HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<UndirectedGraphNode, UndirectedGraphNode>();
HashSet<Integer> visit = new HashSet<Integer>();
LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
Iterator<UndirectedGraphNode> ite;

queue.add(node);

UndirectedGraphNode temp, neigh;
while (!queue.isEmpty()) {
temp = queue.poll();
if (visit.contains(temp.label))
continue;
visit.add(temp.label);
map.put(temp, new UndirectedGraphNode(temp.label));
ite = temp.neighbors.iterator();
while (ite.hasNext()) {
queue.add(ite.next());
}
}

queue.add(node);
visit.clear();
while (!queue.isEmpty()) {
temp = queue.poll();
if (visit.contains(temp.label))
continue;
visit.add(temp.label);

ite = temp.neighbors.iterator();
map.get(temp).neighbors = new ArrayList<UndirectedGraphNode>();
while (ite.hasNext()) {
neigh = ite.next();
map.get(temp).neighbors.add(map.get(neigh));
if (!visit.contains(neigh.label))
queue.add(neigh);
}
}

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