Exemplo n.º 1
0
        public void RevertFromTwin()
        {
            var twinArc = ArcHelper.FindArc(((ABVertex)End).Twin, ((ABVertex)Start).Twin, ((ABVertex)Start).Twin.InboundArcs);

            twinArc.Revert();

            /*if (((ABVertex)Start).Type == VertexType.A)
             * {
             *  var twinArc = ArcHelper.FindArc(((ABVertex)End).Twin, ((ABVertex)Start).Twin, ((ABVertex)Start).OutboundArcs);
             *  twinArc.Revert();
             * }
             * else
             * {
             *  var twinArc = ArcHelper.FindArc(((ABVertex)End).Twin, ((ABVertex)Start).Twin, ((ABVertex)Start).InboundArcs);
             *  twinArc.Revert();
             * }*/
            var tmp = Start;

            Start        = End;
            End          = tmp;
            IsInMatching = !IsInMatching;
            Log.Info("Reverted arc into " + this);
            Start.ArcReverted(this);
            End.ArcReverted(this);
        }
Exemplo n.º 2
0
        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);
        }