public void AddNode(ISimpleGraphNode <T> node) { if (!Nodes.Contains(node)) { Nodes.Add(node); } TopologicalSort(); }
public void CalculateFromNode(ISimpleGraphNode <T> node) { if (!CanCalculate()) { return; } var nodeIndex = CalculationOrder.IndexOf(node); var order = CalculationOrder.GetRange(nodeIndex, CalculationOrder.Count - nodeIndex); foreach (var orderNode in order) { orderNode.Calculate(); } }
private void DepthFirstSearch(ISimpleGraphNode <T> node, Dictionary <ISimpleGraphNode <T>, bool> visited, Stack <ISimpleGraphNode <T> > stack) { visited[node] = true; foreach (var terminal in node.Outputs) { var nextNodeEdge = Edges.FirstOrDefault(e => e.From == terminal); if (nextNodeEdge == null) { continue; } var nextNode = nextNodeEdge.To.ParentNode; if (!visited[nextNode]) { DepthFirstSearch(nextNode, visited, stack); } } stack.Push(node); }
public SimpleGraphTerminal(ISimpleGraphNode <T> parentNode) { ParentNode = parentNode; }
public void RemoveNode(ISimpleGraphNode <T> node) { Nodes.Remove(node); }