public void EdgeSubdivision(IEdgeInterface edge) { // Variable IVertexInterface vertex1 = graph.GetVertexByUserName(edge.GetVertex1().GetUserName()); IVertexInterface vertex2 = graph.GetVertexByUserName(edge.GetVertex2().GetUserName()); // Component if (componentsList != null) { if (countComponents > 1) { // Get component which contains the vertex IGraphInterface myComponentGraph = null; foreach (IGraphInterface componentGraph in componentsList) { if (componentGraph.ExistsUserName(vertex1.GetUserName())) { myComponentGraph = componentGraph; break; } } myComponentGraph.EdgeSubdivision(new Edge(myComponentGraph.GetVertexByUserName(vertex1.GetUserName()), myComponentGraph.GetVertexByUserName(vertex2.GetUserName()))); } else { //componentsList = componentsList; //countComponents = countComponents; //isConnected = isConnected; } } // Properties //isCyclic = isCyclic; //isEulerian = isEulerian; // IntegralInvariants //circuitRank = circuitRank; if (girth.HasValue && girth > 2) { girth = null; } cayleysFormula = null; // SequencesAndPolynomialsOthers if (isConnected != null && !(bool)isConnected) { spanningTreeBFS = spanningTreeBFS = new List <IEdgeInterface>(); } else { spanningTreeBFS = null; } matching = null; cutVertices = null; bridges = null; // DegreeSequence degreeSequence = null; maximumVertexDegree = null; minimumVertexDegree = null; averageVertexDegree = null; medianVertexDegree = null; isDegreeSequenceSorted = false; isRegular = null; // Chordal if (isChordal.HasValue && (bool)isChordal) { isChordal = null; perfectEliminationOrderingList = null; righNeighborhoodDictionary = null; } // GraphClass graphClass = GraphClass.GraphClass.GraphClassEnum.undefined; }
public void VertexExpansion(IVertexInterface vertex) { // Component if (componentsList != null) { // Need change => copies of component if (countComponents > 1) { // Get component which contains the vertex IVertexInterface myVertexComponent = null; IGraphInterface myComponentGraph = null; foreach (IGraphInterface componentGraph in componentsList) { if (componentGraph.ExistsUserName(vertex.GetUserName())) { myComponentGraph = componentGraph; myVertexComponent = myComponentGraph.GetVertexByUserName(vertex.GetUserName()); break; } } myComponentGraph.VertexExpansion(myVertexComponent); } //componentsList = componentsList; //countComponents = countComponents; //isConnected = isConnected; } // Properties isCyclic = null; isEulerian = EulerianGraphEnum.undefined; // IntegralInvariants circuitRank = null; girth = null; cayleysFormula = null; // SequencesAndPolynomialsOthers if (isConnected != null && !(bool)isConnected) { spanningTreeBFS = spanningTreeBFS = new List <IEdgeInterface>(); } else { spanningTreeBFS = null; } matching = null; cutVertices = null; bridges = null; // DegreeSequence degreeSequence = null; maximumVertexDegree = null; minimumVertexDegree = null; averageVertexDegree = null; medianVertexDegree = null; isDegreeSequenceSorted = false; isRegular = null; // Chordal if (isChordal.HasValue && (bool)isChordal) { isChordal = null; perfectEliminationOrderingList = null; righNeighborhoodDictionary = null; } // GraphClass graphClass = GraphClass.GraphClass.GraphClassEnum.undefined; }
public void EdgeDelete(IEdgeInterface edge) { // Variable IVertexInterface vertex1 = graph.GetVertexByUserName(edge.GetVertex1().GetUserName()); IVertexInterface vertex2 = graph.GetVertexByUserName(edge.GetVertex2().GetUserName()); // Component if (componentsList != null) { if (countComponents > 1) { // Get component which contains the vertex IGraphInterface myComponentGraph = null; foreach (IGraphInterface componentGraph in componentsList) { if (componentGraph.ExistsUserName(vertex1.GetUserName())) { myComponentGraph = componentGraph; break; } } myComponentGraph.EdgeDelete(new Edge(myComponentGraph.GetVertexByUserName(vertex1.GetUserName()), myComponentGraph.GetVertexByUserName(vertex2.GetUserName()))); componentsList = null; countComponents = null; isConnected = null; } else { if (bridges != null) { // The edge is a bridge if (bridges.Any(e => ((e.GetVertex1().Equals(vertex1) && e.GetVertex2().Equals(vertex2)) || (e.GetVertex1().Equals(vertex2) && e.GetVertex2().Equals(vertex1))))) { componentsList = null; countComponents = null; isConnected = null; } // The edge isn't a bridge else { //componentsList = componentsList; //countComponents = countComponents; //isConnected = isConnected; } } } } // Properties if (isCyclic != null && !(bool)isCyclic) { isCyclic = false; } else { isCyclic = null; } if (isEulerian == EulerianGraphEnum.eulerian) { isEulerian = EulerianGraphEnum.semiEulerian; } else { isEulerian = EulerianGraphEnum.undefined; } // IntegralInvariants circuitRank = null; if (girth != null && girth > 2) { girth = null; } //cayleysFormula = cayleysFormula; // SequencesAndPolynomialsOthers if (isConnected != null && !(bool)isConnected) { spanningTreeBFS = spanningTreeBFS = new List <IEdgeInterface>(); } else { spanningTreeBFS = null; } matching = null; cutVertices = null; bridges = null; // DegreeSequence if (degreeSequence != null) { int countNeighbourVertex1 = graph.CountNeighbours(vertex1); int countNeighbourVertex2 = graph.CountNeighbours(vertex2); if (!isDegreeSequenceSorted) { // Variable int index1, index2; index1 = degreeSequenceInt.FindIndex(i => i == (countNeighbourVertex1 + 1)); degreeSequenceInt[index1] = countNeighbourVertex1; index2 = degreeSequenceInt.FindIndex(i => i == (countNeighbourVertex2 + 1)); degreeSequenceInt[index2] = countNeighbourVertex2; index1 = degreeSequence.FindIndex(p => p.Key == vertex1); index2 = degreeSequence.FindIndex(p => p.Key == vertex2); degreeSequence[index1] = new KeyValuePair <IVertexInterface, int>(vertex1, countNeighbourVertex1); degreeSequence[index2] = new KeyValuePair <IVertexInterface, int>(vertex2, countNeighbourVertex2); } else { degreeSequence = null; degreeSequenceVertex = null; degreeSequenceInt = null; isDegreeSequenceSorted = false; } if (minimumVertexDegree.HasValue) { if (countNeighbourVertex1 < minimumVertexDegree) { minimumVertexDegree = countNeighbourVertex1; } if (countNeighbourVertex2 < minimumVertexDegree) { minimumVertexDegree = countNeighbourVertex2; } } if (maximumVertexDegree.HasValue) { if (((countNeighbourVertex1 + 1) == maximumVertexDegree) || ((countNeighbourVertex2 + 1) == maximumVertexDegree)) { maximumVertexDegree = null; } } averageVertexDegree = null; medianVertexDegree = null; isRegular = null; } // Chordal isChordal = null; perfectEliminationOrderingList = null; righNeighborhoodDictionary = null; // GraphClass graphClass = GraphClass.GraphClass.GraphClassEnum.undefined; }
public void VertexDelete(IVertexInterface vertex) { // Component if (componentsList != null) { // More components => copies of components if (countComponents > 1) { // Get component which contains the vertex IVertexInterface myVertexComponent = null; IGraphInterface myComponentGraph = null; foreach (IGraphInterface componentGraph in componentsList) { if (componentGraph.ExistsUserName(vertex.GetUserName())) { myComponentGraph = componentGraph; myVertexComponent = myComponentGraph.GetVertexByUserName(vertex.GetUserName()); break; } } // The vertex is component if (myComponentGraph.CountNeighbours(myVertexComponent) == 0) { componentsList.Remove(myComponentGraph); countComponents--; isConnected = countComponents == 1 ? true : false; } // The vertex is in a component with another vertices else { componentsList = null; countComponents = null; isConnected = null; } } else { if (cutVertices != null && !cutVertices.Contains(vertex)) { //componentsList = componentsList; //countComponents = countComponents; //isConnected = isConnected; } else { componentsList = null; countComponents = null; isConnected = null; } } } // Properties if (isCyclic != null && (bool)isCyclic) { isCyclic = null; } if (isConnected != null && !(bool)isConnected) { isEulerian = EulerianGraphEnum.notEulerian; } else { isEulerian = EulerianGraphEnum.undefined; } // IntegralInvariants circuitRank = null; girth = null; cayleysFormula = null; // SequencesAndPolynomialsOthers if (isConnected != null && !(bool)isConnected) { spanningTreeBFS = spanningTreeBFS = new List <IEdgeInterface>(); } else { spanningTreeBFS = null; } matching = null; cutVertices = null; bridges = null; // DegreeSequence degreeSequence = null; maximumVertexDegree = null; minimumVertexDegree = null; averageVertexDegree = null; medianVertexDegree = null; isDegreeSequenceSorted = false; isRegular = null; // Chordal isChordal = null; perfectEliminationOrderingList = null; righNeighborhoodDictionary = null; // GraphClass graphClass = GraphClass.GraphClass.GraphClassEnum.undefined; }