public UndirectedGraphNode CloneGraph1(UndirectedGraphNode node) { if (node == null) { return(null); } Dictionary <UndirectedGraphNode, UndirectedGraphNode> dct = new Dictionary <UndirectedGraphNode, UndirectedGraphNode>(); Queue <UndirectedGraphNode> q = new Queue <UndirectedGraphNode>(); dct.Add(node, new UndirectedGraphNode(node.label)); q.Enqueue(node); while (q.Count != 0) { UndirectedGraphNode gn = q.Dequeue(); foreach (UndirectedGraphNode g in gn.neighbors) { if (!dct.ContainsKey(g)) { dct.Add(g, new UndirectedGraphNode(g.label)); q.Enqueue(g); } dct[gn].neighbors.Add(dct[g]); } } return(dct[node]); }
public UndirectedGraphNode CloneGraph(UndirectedGraphNode node) { if (node == null) { return(node); } UndirectedGraphNode newNode = new UndirectedGraphNode(node.label); Dictionary <UndirectedGraphNode, UndirectedGraphNode> dct = new Dictionary <UndirectedGraphNode, UndirectedGraphNode>(); dct.Add(node, newNode); Queue <UndirectedGraphNode> q = new Queue <UndirectedGraphNode>(); q.Enqueue(node); while (q.Count != 0) { UndirectedGraphNode nd = q.Dequeue(); foreach (UndirectedGraphNode unode in nd.neighbors) { if (!dct.ContainsKey(unode)) { q.Enqueue(unode); UndirectedGraphNode newUnode = new UndirectedGraphNode(unode.label); dct.Add(unode, newUnode); } dct[nd].neighbors.Add(dct[unode]); } } return(newNode); }
public UndirectedGraphNode CloneHelper(UndirectedGraphNode node, Dictionary <UndirectedGraphNode, UndirectedGraphNode> dct) { if (node == null) { return(node); } if (dct.ContainsKey(node)) { return(dct[node]); } UndirectedGraphNode newNode = new UndirectedGraphNode(node.label); dct.Add(node, newNode); foreach (UndirectedGraphNode unode in node.neighbors) { newNode.neighbors.Add(CloneHelper(unode, dct)); } return(newNode); }