internal override void DeleteEdge(BipartiteGraphVertex <T> vertex1, BipartiteGraphVertex <T> vertex2)
        {
            var uVertex = GetUVertex(vertex1, vertex2);
            var vVertex = GetVVertex(vertex1, vertex2);

            Matrix[vVertex.Handle, uVertex.Handle] = EdgeData.Empty;
        }
        internal override void CreateEdge(BipartiteGraphVertex <T> vertex1, BipartiteGraphVertex <T> vertex2, double weight)
        {
            var uVertex = GetUVertex(vertex1, vertex2);
            var vVertex = GetVVertex(vertex1, vertex2);

            Matrix[vVertex.Handle, uVertex.Handle] = new EdgeData(weight);
        }
 protected override bool AllowEdge(BipartiteGraphVertex <T> vertex1, BipartiteGraphVertex <T> vertex2)
 {
     if (Data.AreVerticesAdjacent(vertex1, vertex2))
     {
         return(false);
     }
     return(true);
 }
        internal override void UpdateEdgeData(BipartiteGraphVertex <T> vertex1, BipartiteGraphVertex <T> vertex2, Func <EdgeData, EdgeData> updateFunc)
        {
            var      uVertex  = GetUVertex(vertex1, vertex2);
            var      vVertex  = GetVVertex(vertex1, vertex2);
            EdgeData edgeData = updateFunc(GetEdgeDataCore(vertex1, vertex2));

            Matrix[vVertex.Handle, uVertex.Handle] = edgeData;
        }
        public void DeleteEdge(BipartiteGraphVertex <T> vertex1, BipartiteGraphVertex <T> vertex2)
        {
            Guard.IsNotNull(vertex1, nameof(vertex1));
            Guard.IsNotNull(vertex2, nameof(vertex2));
            CheckVertexOwner(vertex1);
            CheckVertexOwner(vertex2);
            if (!Data.AreVerticesAdjacent(vertex1, vertex2))
            {
                throw new InvalidOperationException();
            }
            EdgeData edgeData = Data.GetEdgeData(vertex1, vertex2);

            Data.DeleteEdge(vertex1, vertex2);
            vertex1.Degree--;
            vertex2.Degree--;
            Properties.OnEdgeDeleted(edgeData);
        }
 public GetMaximalMatchingFSetItem(BipartiteGraphVertex <T> vertex, Color bfsColor)
 {
     this.vertex   = vertex;
     this.bfsColor = bfsColor;
 }
 bool IsInFSet(BipartiteGraphVertex <T> vertex)
 {
     return(vertex.IsDataOfType <GetMaximalMatchingVertexInFSetData>());
 }
        bool IsMatchedEdge(BipartiteGraphVertex <T> vertex1, BipartiteGraphVertex <T> vertex2)
        {
            EdgeData edgeData = Data.GetEdgeData(vertex1, vertex2);

            return(edgeData.IsDataOfType <GetMaximalMatchingMatchedData>());
        }
 bool IsMatchedVertex(BipartiteGraphVertex <T> vertex)
 {
     return(vertex.IsDataOfType <GetMaximalMatchingMatchedData>());
 }