Пример #1
0
 public void AddNode(ISimpleGraphNode <T> node)
 {
     if (!Nodes.Contains(node))
     {
         Nodes.Add(node);
     }
     TopologicalSort();
 }
Пример #2
0
        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();
            }
        }
Пример #3
0
        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;
 }
Пример #5
0
 public void RemoveNode(ISimpleGraphNode <T> node)
 {
     Nodes.Remove(node);
 }