public UndirectedGraphNode CloneGraphMethod(UndirectedGraphNode node) { if (null == node) { return(null); } var queue = new Queue <UndirectedGraphNode>(); var dic = new Dictionary <UndirectedGraphNode, UndirectedGraphNode>(); queue.Enqueue(node); dic.Add(node, new UndirectedGraphNode(node.label)); while (queue.Count != 0) { var useNode = queue.Dequeue(); foreach (var oneNode in useNode.neighbors) { if (!dic.ContainsKey(oneNode)) { dic.Add(oneNode, new UndirectedGraphNode(oneNode.label)); queue.Enqueue(oneNode); } dic[useNode].neighbors.Add(dic[oneNode]); } } return(dic[node]); }
public UndirectedGraphNode CloneGraph(UndirectedGraphNode node) { if (node == null) { return(null); } var dic = new Dictionary <UndirectedGraphNode, UndirectedGraphNode>(); var isVisited = new HashSet <UndirectedGraphNode>(); var queue = new Queue <UndirectedGraphNode>(); var result = GetOrAddGraphNodeMapping(dic, node); queue.Enqueue(node); while (queue.Count > 0) { var current = queue.Dequeue(); if (!isVisited.Contains(current)) { var cloneNode = GetOrAddGraphNodeMapping(dic, current); foreach (UndirectedGraphNode neighbor in current.neighbors) { var cloneNeighbor = GetOrAddGraphNodeMapping(dic, neighbor); cloneNode.neighbors.Add(cloneNeighbor); queue.Enqueue(neighbor); } isVisited.Add(current); } } return(result); }
private UndirectedGraphNode CloneNode(UndirectedGraphNode node, Dictionary <UndirectedGraphNode, UndirectedGraphNode> graphMap) { if (node == null) { return(null); } UndirectedGraphNode clonedNode = new UndirectedGraphNode(node.label); graphMap.Add(node, clonedNode); UndirectedGraphNode neighborNode = null; for (int i = 0; i < node.neighbors.Count; i++) { if (node.neighbors[i] == null) { clonedNode.neighbors.Add(node.neighbors[i]); continue; } if (graphMap.ContainsKey(node.neighbors[i])) { neighborNode = graphMap[node.neighbors[i]]; } else { neighborNode = CloneNode(node.neighbors[i], graphMap); } clonedNode.neighbors.Add(neighborNode); } return(clonedNode); }
public UndirectedGraphNode CloneGraph(UndirectedGraphNode node) { if (node == null) { return(node); } Dictionary <UndirectedGraphNode, UndirectedGraphNode> graphMap = new Dictionary <UndirectedGraphNode, UndirectedGraphNode>(); UndirectedGraphNode startNode = CloneNode(node, graphMap); return(startNode); }
private UndirectedGraphNode GetOrAddGraphNodeMapping( Dictionary <UndirectedGraphNode, UndirectedGraphNode> dic, UndirectedGraphNode node) { if (dic.ContainsKey(node)) { return(dic[node]); } else { var newNode = new UndirectedGraphNode(node.label); dic.Add(node, newNode); return(newNode); } }
private static UndirectedGraphNode DFSClone(UndirectedGraphNode node) { if (node == null) { return(null); } if (nodeMap.ContainsKey(node)) { return(nodeMap[node]); } var newNode = new UndirectedGraphNode(node.label); nodeMap.Add(node, newNode); foreach (var n in node.neighbors) { var childNode = DFSClone(n); newNode.neighbors.Add(childNode); } return(newNode); }
private static void Main() { // "2[z]2[2[y]pq1[2[jk]e1[f]]]ef" var decoded = DecodeString("2[z]2[2[y]pq1[2[jk]e1[f]]]ef"); var node = new UndirectedGraphNode(0); node.neighbors = new List <UndirectedGraphNode> { node, node }; var clone = CloneGraph(node); var postfix = EvalRPN(new string[] { "10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+" }); var temperatures = new int[] { 73, 74, 75, 71, 69, 72, 76, 73 }; var result = DailyTemperatures(temperatures); var mStack = new MinStack(); mStack.Push(2147483646); mStack.Push(2147483646); mStack.Push(2147483647); var top = mStack.Top(); mStack.Pop(); var getMin = mStack.GetMin(); mStack.Pop(); getMin = mStack.GetMin(); mStack.Pop(); mStack.Push(2147483647); top = mStack.Top(); getMin = mStack.GetMin(); mStack.Push(-2147483648); top = mStack.Top(); getMin = mStack.GetMin(); mStack.Pop(); getMin = mStack.GetMin(); }
public static UndirectedGraphNode CloneGraph(UndirectedGraphNode node) { return(DFSClone(node)); }