Пример #1
0
        public void RemoveEdgesTo(SomeGraphNode <EdgeModel> toNode)
        {
            var iterEdges = new List <Edge>(edges);

            foreach (Edge edge in iterEdges)
            {
                if (edge.toNode.Value == toNode)
                {
                    RemoveEdge(edge);
                }
            }
        }
Пример #2
0
 public abstract void AddEdge(EdgeModel model, SomeGraphNode <EdgeModel> toNode);
Пример #3
0
 public void RemoveEdgesFrom(SomeGraphNode <EdgeModel> fromNode)
 {
     fromNode.RemoveEdgesTo(this);
 }
Пример #4
0
        protected void CollectBreadthFirstChildren(List <SomeGraphNode <EdgeModel> > nodes, SomeGraphNode <EdgeModel> fromNode, HashSet <SomeGraphNode <EdgeModel> > searchedNodes, HashSet <SomeGraphNode <EdgeModel> > allNodes)
        {
            foreach (Edge edge in fromNode.edges)
            {
                var toNode = edge.toNode.Value;

                // Avoid duplicates for graphs with loops
                if (allNodes.Contains(toNode))
                {
                    continue;
                }

                allNodes.Add(toNode);
                nodes.Add(toNode);
            }

            foreach (Edge edge in fromNode.edges)
            {
                var toNode = edge.toNode.Value;

                // Avoid infinite loop for graphs with loops
                if (searchedNodes.Contains(toNode))
                {
                    continue;
                }

                searchedNodes.Add(toNode);
                CollectBreadthFirstChildren(nodes, toNode, searchedNodes, allNodes);
            }
        }