您的位置:首页 > 其它

Clone Graph

2015-03-16 16:04 260 查看
Clone Graph

问题:

Clone an undirected graph. Each node in the graph contains a
label
and a list of its
neighbors
.

思路:

  dfs 或者 bfs

我的代码1:(dfs)

public class Solution {
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node == null) return null;
HashMap<UndirectedGraphNode,UndirectedGraphNode> hm = new HashMap<UndirectedGraphNode,UndirectedGraphNode>();
Queue<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();
queue.offer(node);
UndirectedGraphNode rst = new UndirectedGraphNode(node.label);
hm.put(node, rst);
while(!queue.isEmpty())
{
UndirectedGraphNode first = queue.poll();
UndirectedGraphNode ugn = hm.get(first);
for(UndirectedGraphNode tmp : first.neighbors)
{
if(!hm.containsKey(tmp))
{
UndirectedGraphNode newNode = new UndirectedGraphNode(tmp.label);
hm.put(tmp,newNode);
queue.offer(tmp);
}
ugn.neighbors.add(hm.get(tmp));
}
}
return rst;
}
}


View Code
学习之处:

无论是DFS和BFS写的过程中都出现了死循环的问题,纠结而言是因为对于节点1 有邻居2,3 HashMap里面便有了(1,**)(2,**),(3,**),对于节点2 有邻居2 则我们不需要进一步的访问(进一步的访问是指对于BFS加入到Queue中,对于DFS是下一步的递归),仅仅需要加入到Neighbor中就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: