private LinkedList <Arc> Reconstruct(IStackableVertex top, IStackableVertex start, LinkedList <Arc> path) { var nodeCur = top; while (nodeCur != start) { if (!nodeCur.Ancestor.IsExpanded) { path.AddFirst(nodeCur.ArcFromAncestor); nodeCur = nodeCur.Ancestor; } else { var eA = nodeCur.Ancestor.ExpandedArc; var q = ReconstructQ(nodeCur, eA.End, new LinkedList <Arc>()); path.PrependRange(q); nodeCur = eA.Start; } } if (nodeCur.ArcFromAncestor != null) { path.AddFirst(nodeCur.ArcFromAncestor); } return(path); }
public void Pop() { CurrentStack.RemoveLast(); MDFS._step++; Log.Info("(" + MDFS._step + ") Popped vertex " + ((ABVertex)_top).Name); _top = _top.Ancestor; if (_top != null) { Log.Info("New top vertex " + ((ABVertex)_top).Name); } }
public IStackableVertex Push(ABVertex vertex, Arc arcFromAncestor) { vertex.Pushed(_top, arcFromAncestor); if (_top != null) { _top.AddDescendant(vertex); } _top = vertex; CurrentStack.AddLast(vertex); MDFS._step++; Log.Info("(" + MDFS._step + ") Pushed vertex " + vertex.Name + " and arc " + arcFromAncestor); return(vertex); }
private LinkedList <Arc> ReconstructQ(IStackableVertex uA, IStackableVertex wA, LinkedList <Arc> path) { var st = wA; var p1St = st.Value.P.Start; var p2St = st.Value.P.End; var pathQ = Reconstruct(p1St, st, path); while (p2St != uA) { st = st.Value.P.End; var block = Reconstruct(st.Value.P.Start, st, path); pathQ.AppendRange(block); } if (uA.ArcFromAncestor == null) { var arc = ArcHelper.FindArc(st.Value.P.Start.Value, uA.Value, uA.Value.InboundArcs); pathQ.AddLast(arc); } else { pathQ.AddLast(uA.ArcFromAncestor); } return(path); }
public LinkedList <Arc> Run() { _start = _k.Push(_tg.StartVertex, null); Search(); return(_mAugmentingPath); }
public Connection(Arc arc, IStackableVertex start, IStackableVertex end) { Arc = arc; Start = start; End = end; }
public void Pushed(IStackableVertex ancestor, Arc arcFromAncestor) { Ancestor = ancestor; ArcFromAncestor = arcFromAncestor; }
public void AddDescendant(IStackableVertex vertex) { Descendants.AddLast(vertex); }
public ExpandedArc(Arc a) { Start = (ABVertex)a.Start; End = (ABVertex)a.End; }