private void Dfs(UndirectedGraphNode node, Dictionary <UndirectedGraphNode, UndirectedGraphNode> visited) { if (visited.ContainsKey(node)) { return; } var newNode = new UndirectedGraphNode(node.label); foreach (var neighber in node.neighbors) { newNode.neighbors.Add(neighber); } visited.Add(node, newNode); foreach (var neignber in node.neighbors) { Dfs(neignber, visited); } }
public UndirectedGraphNode CloneGraph(UndirectedGraphNode node) { if (node == null) { return(null); } var visited = new Dictionary <UndirectedGraphNode, UndirectedGraphNode>(); Dfs(node, visited); foreach (var newNode in visited.Values) { for (var i = 0; i < newNode.neighbors.Count; i++) { newNode.neighbors[i] = visited[newNode.neighbors[i]]; } } return(visited[node]); }