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)); } }
public void AddVertex(SimpleVertex v) { vertexes.Add(v); }