Esempio n. 1
0
 private Edge NewVirtualEdge(Node node1, Node node2, Component component)
 {
     throw new NotImplementedException();
 }
Esempio n. 2
0
        public void PathSearch(Node v)
        {
            foreach (var e in v.AdjacentList)
            {
                var w = v == e.Node1 ? e.Node2 : e.Node1;
                if (!(IsFrond(e)))
                {
                    if (StartsPath(e))
                    {
                        var deletedTriples = new List<SepTriple>();
                        while (_tstack.Peek().A.Id > lowpt1(w).Id)
                        {
                            deletedTriples.Add(_tstack.Pop());
                        }
                        if (!deletedTriples.Any())
                        {
                            _tstack.Push(new SepTriple(Nodes[w.Id + Nd(w) - 1], lowpt1(w), v));
                        }
                        else
                        {
                            var y = deletedTriples.Max(t => t.H);
                            var idToAdd = Math.Max(y.Id, w.Id + Nd(w) - 1);
                            var newTriple = new SepTriple(Nodes[idToAdd], lowpt1(w), deletedTriples.Last().B);
                            _tstack.Push(newTriple);
                        }
                        _tstack.Push(EOS);
                    }

                    PathSearch(w);
                    _estack.Push(e);

                    CheckForType1Pairs();
                    CheckForType2Pairs();

                    if (StartsPath(e))
                    {
                        while (_tstack.Pop() != EOS)
                        {
                        }
                        var peek = _tstack.Peek();
                        while (peek.A.Id != v.Id && peek.B.Id != v.Id && high(v).Id > peek.H.Id)
                        {
                            _tstack.Pop();
                            peek = _tstack.Peek();
                        }

                    }
                }

                else //edge is frond
                {
                    if (StartsPath(e)) {
                        var deletedTriples = new List<SepTriple>();
                        while (_tstack.Peek().A.Id > lowpt1(w).Id) {
                            deletedTriples.Add(_tstack.Pop());
                        }
                        if (!deletedTriples.Any())
                        {
                            _tstack.Push(new SepTriple(v, w, v));
                        }
                        else {
                            var y = deletedTriples.Max(t => t.H);
                            var newTriple = new SepTriple(y, w, deletedTriples.Last().B);
                            _tstack.Push(newTriple);
                        }
                    }

                    var treeEdge = FindTreeEdge(w, v); //w is parent of v
                    if (treeEdge != null)
                    {
                        var C = NewComponent(e, treeEdge);
                        var virtEdge = NewVirtualEdge(w, v, C);
                        MakeTreeEdge(virtEdge, treeEdge);
                    }
                }
            }
        }
Esempio n. 3
0
 private int Nd(Node node)
 {
     throw new NotImplementedException();
 }
Esempio n. 4
0
 private Node lowpt1(Node p0)
 {
     throw new NotImplementedException();
 }
Esempio n. 5
0
 private Node high(Node node)
 {
     throw new NotImplementedException();
 }
Esempio n. 6
0
 private Edge FindTreeEdge(Node node1, Node node2)
 {
     throw new NotImplementedException();
 }
Esempio n. 7
0
 public PalmTree(Node root)
 {
     Root = root;
 }