public void RemoveEdgesTo(SomeGraphNode <EdgeModel> toNode) { var iterEdges = new List <Edge>(edges); foreach (Edge edge in iterEdges) { if (edge.toNode.Value == toNode) { RemoveEdge(edge); } } }
public abstract void AddEdge(EdgeModel model, SomeGraphNode <EdgeModel> toNode);
public void RemoveEdgesFrom(SomeGraphNode <EdgeModel> fromNode) { fromNode.RemoveEdgesTo(this); }
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); } }