这个题目就是用深度优先遍历就好。但是记录方式要更改一下。并不是那个点已经访问过就直接返回。因为一个点可以重复链接自己,也可重复链接别人
/**
* Definition for undirected graph.
* class UndirectedGraphNode {
* int label;
* List<UndirectedGraphNode> neighbors;
* UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
* };
*/
public class Solution {
HashMap<Integer,UndirectedGraphNode> record=new HashMap<>();
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
if(node==null)
{
return node;
}
UndirectedGraphNode result=new UndirectedGraphNode(node.label);
record.put(node.label,result);
for(UndirectedGraphNode niber:node.neighbors)
{
help(result,niber);
}
return result;
}
public void help(UndirectedGraphNode father,UndirectedGraphNode ori)
{
UndirectedGraphNode newNode=record.get(ori.label);
if(newNode!=null)
{
father.neighbors.add(newNode);
return;
}
newNode=new UndirectedGraphNode(ori.label);
record.put(ori.label,newNode);
father.neighbors.add(newNode);
for(UndirectedGraphNode niber:ori.neighbors)
{
help(newNode,niber);
}
}
}