Example #1
0
 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);
         }
     }
 }
Example #2
0
 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);
             }
         }
     }
 }
Example #3
0
 public DirectedGraphEdge(DirectedGraphNode a, DirectedGraphNode b)
     : this(a)
 {
     this.B = b;
 }
Example #4
0
 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);
             }
         }
     }
 }
Example #5
0
 public DirectedGraphEdge(DirectedGraphNode a)
 {
     this.A = a;
     this.A.Edges.Add(this);
 }