protected bool CanMerge(SimpleEdge e)
        {
            SimpleVertex v1 = e.V1;
            SimpleVertex v2 = e.V2;

            if (v1.ParentSegment != null && v2.ParentSegment != null && v1.ParentSegment == v2.ParentSegment)
            {
                return(false);
            }
            double v1Segment = v1.ParentSegment == null ? 0 : v1.ParentSegment.MstW;
            double v2Segment = v2.ParentSegment == null ? 0 : v2.ParentSegment.MstW;

            if (e.Weight <= (v1Segment + tresh1) || e.Weight <= (v2Segment + tresh2))
            {
                return(true);
            }
            return(false);
        }
        protected void Merge(SimpleEdge e)
        {
            SimpleVertex  v1  = e.V1;
            SimpleVertex  v2  = e.V2;
            SimpleSegment si1 = v1.ParentSegment;
            SimpleSegment si2 = v2.ParentSegment;

            if (si1 == null && si2 != null)
            {
                v1.ParentSegment = si2; si2.MstW = e.Weight;
            }
            if (si1 != null && si2 == null)
            {
                v2.ParentSegment = si1; si1.MstW = e.Weight;
            }
            if (si1 == null && si2 == null)
            {
                v1.ParentSegment      = v2.ParentSegment = new SimpleSegment();
                v1.ParentSegment.MstW = e.Weight;
            }
            if (si1 != null && si2 != null)
            {
                SimpleSegment smallersegment;
                SimpleSegment largerSegment;
                if (si1.Vertexes.Count > si2.Vertexes.Count)
                {
                    smallersegment = si2; largerSegment = si1;
                }
                else
                {
                    smallersegment = si1; largerSegment = si2;
                }
                foreach (SimpleVertex v in new ArrayList(smallersegment.Vertexes))
                {
                    v.ParentSegment = largerSegment;
                }
                largerSegment.MstW = Math.Max(e.Weight, Math.Max(largerSegment.MstW, smallersegment.MstW));
            }
        }
Exemplo n.º 3
0
 public void AddVertex(SimpleVertex v)
 {
     vertexes.Add(v);
 }