public static void SetReference(this IEnumerable <DirectedGraphNode> nodes) { foreach (var node in nodes) { DirectedGraphNode a = node; foreach (var id in a.EdgesId) { DirectedGraphNode b = nodes.Where(x => x.Id == id).FirstOrDefault(); DirectedGraphEdge edge = new DirectedGraphEdge(a, b); } } }
private static IEnumerable <DirectedGraphCycle> FindAllCyclesUnoptimized(HashSet <DirectedGraphNode> alreadyVisited, DirectedGraphNode a) { foreach (DirectedGraphEdge e in a.Edges) { if (alreadyVisited.Contains(e.B)) { yield return(new DirectedGraphCycle(e)); } else { HashSet <DirectedGraphNode> newSet = new HashSet <DirectedGraphNode>(alreadyVisited); newSet.Add(e.B);//EDIT: thnx dhsto foreach (DirectedGraphCycle c in FindAllCyclesUnoptimized(newSet, e.B)) { c.Build(e); yield return(c); } } } }
public DirectedGraphEdge(DirectedGraphNode a, DirectedGraphNode b) : this(a) { this.B = b; }
private static IEnumerable <DirectedGraphCycle> FindAllCycles(HashSet <DirectedGraphNode> alreadyVisited, DirectedGraphNode a, Boolean issub = false) { for (int i = 0; i < a.Edges.Count; i++) { DirectedGraphEdge e = a.Edges[i]; if (alreadyVisited.Contains(e.B)) { yield return(new DirectedGraphCycle(e)); } else { HashSet <DirectedGraphNode> newSet = i == a.Edges.Count - 1 ? alreadyVisited : new HashSet <DirectedGraphNode>(alreadyVisited); newSet.Add(e.B); foreach (DirectedGraphCycle c in FindAllCycles(newSet, e.B)) { c.Build(e); yield return(c); } } } }
public DirectedGraphEdge(DirectedGraphNode a) { this.A = a; this.A.Edges.Add(this); }