@Test public void testRemoveVertex() throws Exception { DENOPTIMGraph graph = new DENOPTIMGraph(); ArrayList<DENOPTIMAttachmentPoint> aps0 = new ArrayList<DENOPTIMAttachmentPoint>(); aps0.add(new DENOPTIMAttachmentPoint(0, 1, 1)); aps0.add(new DENOPTIMAttachmentPoint(1, 1, 1)); aps0.add(new DENOPTIMAttachmentPoint(2, 1, 1)); DENOPTIMVertex v0 = new DENOPTIMVertex(0, 0, aps0, 0); graph.addVertex(v0); ArrayList<DENOPTIMAttachmentPoint> aps1 = new ArrayList<DENOPTIMAttachmentPoint>(); aps1.add(new DENOPTIMAttachmentPoint(0, 1, 1)); aps1.add(new DENOPTIMAttachmentPoint(1, 1, 1)); DENOPTIMVertex v1 = new DENOPTIMVertex(1, 0, aps1, 1); graph.addVertex(v1); graph.addEdge(new DENOPTIMEdge(0, 1, 0, 0, 1)); ArrayList<DENOPTIMAttachmentPoint> aps2 = new ArrayList<DENOPTIMAttachmentPoint>(); aps2.add(new DENOPTIMAttachmentPoint(0, 1, 1)); aps2.add(new DENOPTIMAttachmentPoint(1, 1, 1)); DENOPTIMVertex v2 = new DENOPTIMVertex(2, 0, aps2, 1); graph.addVertex(v2); graph.addEdge(new DENOPTIMEdge(1, 2, 1, 0, 1)); ArrayList<DENOPTIMAttachmentPoint> aps3 = new ArrayList<DENOPTIMAttachmentPoint>(); aps3.add(new DENOPTIMAttachmentPoint(0, 1, 1)); DENOPTIMVertex v3 = new DENOPTIMVertex(3, 0, aps3, 1); graph.addVertex(v3); graph.addEdge(new DENOPTIMEdge(2, 3, 1, 0, 1)); ArrayList<DENOPTIMAttachmentPoint> aps4 = new ArrayList<DENOPTIMAttachmentPoint>(); aps4.add(new DENOPTIMAttachmentPoint(0, 1, 1)); aps4.add(new DENOPTIMAttachmentPoint(1, 1, 1)); aps4.add(new DENOPTIMAttachmentPoint(2, 1, 1)); DENOPTIMVertex v4 = new DENOPTIMVertex(4, 0, aps4, 1); graph.addVertex(v4); graph.addEdge(new DENOPTIMEdge(0, 4, 1, 0, 1)); ArrayList<DENOPTIMAttachmentPoint> aps5 = new ArrayList<DENOPTIMAttachmentPoint>(); aps5.add(new DENOPTIMAttachmentPoint(0, 1, 1)); DENOPTIMVertex v5 = new DENOPTIMVertex(5, 0, aps5, 1); graph.addVertex(v5); graph.addEdge(new DENOPTIMEdge(4, 5, 1, 0, 1)); ArrayList<DENOPTIMAttachmentPoint> aps6 = new ArrayList<DENOPTIMAttachmentPoint>(); aps6.add(new DENOPTIMAttachmentPoint(0, 1, 1)); DENOPTIMVertex v6 = new DENOPTIMVertex(6, 0, aps6, 1); graph.addVertex(v6); graph.addEdge(new DENOPTIMEdge(0, 6, 2, 0, 1)); ArrayList<DENOPTIMAttachmentPoint> aps7 = new ArrayList<DENOPTIMAttachmentPoint>(); aps7.add(new DENOPTIMAttachmentPoint(0, 1, 1)); DENOPTIMVertex v7 = new DENOPTIMVertex(7, 0, aps7, 1); graph.addVertex(v7); graph.addEdge(new DENOPTIMEdge(4, 7, 2, 0, 1)); graph.addRing(new DENOPTIMRing(new ArrayList<DENOPTIMVertex>( Arrays.asList(v5, v4, v0, v1, v2, v3)))); graph.addRing(new DENOPTIMRing(new ArrayList<DENOPTIMVertex>( Arrays.asList(v6, v0, v4, v7)))); graph.addSymmetricSetOfVertices(new SymmetricSet( new ArrayList<Integer>(Arrays.asList(3,5)))); graph.addSymmetricSetOfVertices(new SymmetricSet( new ArrayList<Integer>(Arrays.asList(6,7)))); String graphEnc = "0 0_1_0_0,1_1_1_0,2_1_1_0,3_1_1_0,4_1_1_0,5_1_1_0," + "6_1_1_0,7_1_1_0, 0_0_1_0_1,1_1_2_0_1,2_1_3_0_1,0_1_4_0_1," + "4_1_5_0_1,0_2_6_0_1,4_2_7_0_1, " + "DENOPTIMRing [verteces=[5_1_1_0, 4_1_1_0, 0_1_0_0, 1_1_1_0," + " 2_1_1_0, 3_1_1_0]] DENOPTIMRing [verteces=[6_1_1_0," + " 0_1_0_0, 4_1_1_0, 7_1_1_0]] " + "SymmetricSet [symVrtxIds=[3, 5]] " + "SymmetricSet [symVrtxIds=[6, 7]]"; int numV = graph.getVertexCount(); int numE = graph.getEdgeCount(); int numS = graph.getSymmetricSetCount(); int numR = graph.getRingCount(); graph.removeVertex(v5); int numVa = graph.getVertexCount(); int numEa = graph.getEdgeCount(); int numSa = graph.getSymmetricSetCount(); int numRa = graph.getRingCount(); assertEquals(numVa,numV-1); assertEquals(numEa,numE-1); assertEquals(numSa,numS-1); assertEquals(numRa,numR-1); graph.removeVertex(v3); int numVb = graph.getVertexCount(); int numEb = graph.getEdgeCount(); int numSb = graph.getSymmetricSetCount(); int numRb = graph.getRingCount(); assertEquals(numVb,numVa-1); assertEquals(numEb,numEa-1); assertEquals(numSb,numSa); assertEquals(numRb,numRa); graph.removeVertex(v4); int numVc = graph.getVertexCount(); int numEc = graph.getEdgeCount(); int numSc = graph.getSymmetricSetCount(); int numRc = graph.getRingCount(); assertEquals(numVc,numVb-1); assertEquals(numEc,numEb-2); assertEquals(numSc,numSb); assertEquals(numRc,numRb-1); }
public void removeVertex(DENOPTIMVertex m_vertex) { if (!gVertices.contains(m_vertex)) { return; } int vid = m_vertex.getVertexId(); if (isVertexInRing(m_vertex)) { ArrayList<DENOPTIMRing> rToRm = getRingsInvolvingVertex(m_vertex); for (DENOPTIMRing r : rToRm) { removeRing(r); } } ArrayList<DENOPTIMEdge> lstEdges = this.getEdgeList(); ArrayList<DENOPTIMEdge> eToDel = new ArrayList<>(); for (int i=0; i<lstEdges.size(); i++) { DENOPTIMEdge edge = lstEdges.get(i); if (vid == edge.getTargetVertex()) { eToDel.add(edge); } if (vid == edge.getSourceVertex()) { eToDel.add(edge); } } for (int i=0; i<eToDel.size(); i++) { DENOPTIMEdge edge = eToDel.get(i); int bndOrder = edge.getBondType(); int iA = edge.getSourceDAP(); int srcvid = edge.getSourceVertex(); DENOPTIMVertex src = this.getVertexWithId(srcvid); src.updateAttachmentPoint(iA, bndOrder); int iB = edge.getTargetDAP(); int trgvid = edge.getTargetVertex(); if (this.containsVertexId(trgvid)) { DENOPTIMVertex trg = this.getVertexWithId(trgvid); trg.updateAttachmentPoint(iB, bndOrder); } this.removeEdge(edge); } ArrayList<SymmetricSet> ssToRemove = new ArrayList<SymmetricSet>(); for (SymmetricSet ss : symVertices) { if (ss.contains(vid)) { if (ss.size() < 3) { ssToRemove.add(ss); } else { ss.remove((Integer) vid); } } } symVertices.removeAll(ssToRemove); gVertices.remove(m_vertex); }
DENOPTIMGraph implements Serializable, Cloneable { public void removeVertex(DENOPTIMVertex m_vertex) { if (!gVertices.contains(m_vertex)) { return; } int vid = m_vertex.getVertexId(); if (isVertexInRing(m_vertex)) { ArrayList<DENOPTIMRing> rToRm = getRingsInvolvingVertex(m_vertex); for (DENOPTIMRing r : rToRm) { removeRing(r); } } ArrayList<DENOPTIMEdge> lstEdges = this.getEdgeList(); ArrayList<DENOPTIMEdge> eToDel = new ArrayList<>(); for (int i=0; i<lstEdges.size(); i++) { DENOPTIMEdge edge = lstEdges.get(i); if (vid == edge.getTargetVertex()) { eToDel.add(edge); } if (vid == edge.getSourceVertex()) { eToDel.add(edge); } } for (int i=0; i<eToDel.size(); i++) { DENOPTIMEdge edge = eToDel.get(i); int bndOrder = edge.getBondType(); int iA = edge.getSourceDAP(); int srcvid = edge.getSourceVertex(); DENOPTIMVertex src = this.getVertexWithId(srcvid); src.updateAttachmentPoint(iA, bndOrder); int iB = edge.getTargetDAP(); int trgvid = edge.getTargetVertex(); if (this.containsVertexId(trgvid)) { DENOPTIMVertex trg = this.getVertexWithId(trgvid); trg.updateAttachmentPoint(iB, bndOrder); } this.removeEdge(edge); } ArrayList<SymmetricSet> ssToRemove = new ArrayList<SymmetricSet>(); for (SymmetricSet ss : symVertices) { if (ss.contains(vid)) { if (ss.size() < 3) { ssToRemove.add(ss); } else { ss.remove((Integer) vid); } } } symVertices.removeAll(ssToRemove); gVertices.remove(m_vertex); } }
DENOPTIMGraph implements Serializable, Cloneable { public void removeVertex(DENOPTIMVertex m_vertex) { if (!gVertices.contains(m_vertex)) { return; } int vid = m_vertex.getVertexId(); if (isVertexInRing(m_vertex)) { ArrayList<DENOPTIMRing> rToRm = getRingsInvolvingVertex(m_vertex); for (DENOPTIMRing r : rToRm) { removeRing(r); } } ArrayList<DENOPTIMEdge> lstEdges = this.getEdgeList(); ArrayList<DENOPTIMEdge> eToDel = new ArrayList<>(); for (int i=0; i<lstEdges.size(); i++) { DENOPTIMEdge edge = lstEdges.get(i); if (vid == edge.getTargetVertex()) { eToDel.add(edge); } if (vid == edge.getSourceVertex()) { eToDel.add(edge); } } for (int i=0; i<eToDel.size(); i++) { DENOPTIMEdge edge = eToDel.get(i); int bndOrder = edge.getBondType(); int iA = edge.getSourceDAP(); int srcvid = edge.getSourceVertex(); DENOPTIMVertex src = this.getVertexWithId(srcvid); src.updateAttachmentPoint(iA, bndOrder); int iB = edge.getTargetDAP(); int trgvid = edge.getTargetVertex(); if (this.containsVertexId(trgvid)) { DENOPTIMVertex trg = this.getVertexWithId(trgvid); trg.updateAttachmentPoint(iB, bndOrder); } this.removeEdge(edge); } ArrayList<SymmetricSet> ssToRemove = new ArrayList<SymmetricSet>(); for (SymmetricSet ss : symVertices) { if (ss.contains(vid)) { if (ss.size() < 3) { ssToRemove.add(ss); } else { ss.remove((Integer) vid); } } } symVertices.removeAll(ssToRemove); gVertices.remove(m_vertex); } DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings,
                            ArrayList<SymmetricSet> m_symVerts);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings,
                            ArrayList<ClosableChain> m_closableChains,
                            ArrayList<SymmetricSet> m_symVerts);  DENOPTIMGraph(); }
DENOPTIMGraph implements Serializable, Cloneable { public void removeVertex(DENOPTIMVertex m_vertex) { if (!gVertices.contains(m_vertex)) { return; } int vid = m_vertex.getVertexId(); if (isVertexInRing(m_vertex)) { ArrayList<DENOPTIMRing> rToRm = getRingsInvolvingVertex(m_vertex); for (DENOPTIMRing r : rToRm) { removeRing(r); } } ArrayList<DENOPTIMEdge> lstEdges = this.getEdgeList(); ArrayList<DENOPTIMEdge> eToDel = new ArrayList<>(); for (int i=0; i<lstEdges.size(); i++) { DENOPTIMEdge edge = lstEdges.get(i); if (vid == edge.getTargetVertex()) { eToDel.add(edge); } if (vid == edge.getSourceVertex()) { eToDel.add(edge); } } for (int i=0; i<eToDel.size(); i++) { DENOPTIMEdge edge = eToDel.get(i); int bndOrder = edge.getBondType(); int iA = edge.getSourceDAP(); int srcvid = edge.getSourceVertex(); DENOPTIMVertex src = this.getVertexWithId(srcvid); src.updateAttachmentPoint(iA, bndOrder); int iB = edge.getTargetDAP(); int trgvid = edge.getTargetVertex(); if (this.containsVertexId(trgvid)) { DENOPTIMVertex trg = this.getVertexWithId(trgvid); trg.updateAttachmentPoint(iB, bndOrder); } this.removeEdge(edge); } ArrayList<SymmetricSet> ssToRemove = new ArrayList<SymmetricSet>(); for (SymmetricSet ss : symVertices) { if (ss.contains(vid)) { if (ss.size() < 3) { ssToRemove.add(ss); } else { ss.remove((Integer) vid); } } } symVertices.removeAll(ssToRemove); gVertices.remove(m_vertex); } DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings,
                            ArrayList<SymmetricSet> m_symVerts);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings,
                            ArrayList<ClosableChain> m_closableChains,
                            ArrayList<SymmetricSet> m_symVerts);  DENOPTIMGraph(); void setGraphId(int m_id); int getGraphId(); void setMsg(String m_msg); String getMsg(); boolean hasSymmetricAP(); boolean hasSymmetryInvolvingVertex(int vid); int getSymmetricSetCount(); Iterator<SymmetricSet> getSymSetsIterator(); SymmetricSet getSymSetForVertexID(int vid); void setSymMap(ArrayList<SymmetricSet> m_mp); void addSymmetricSetOfVertices(SymmetricSet m_ss); void updateVertex(DENOPTIMVertex m_vertex); void setVertexList(ArrayList<DENOPTIMVertex> m_vertices); void setEdgeList(ArrayList<DENOPTIMEdge> m_edges); void setRings(ArrayList<DENOPTIMRing> m_rings); void setCandidateClosableChains(ArrayList<ClosableChain> m_closableChains); ArrayList<ClosableChain> getClosableChains(); ArrayList<DENOPTIMVertex> getVertexList(); ArrayList<DENOPTIMEdge> getEdgeList(); ArrayList<DENOPTIMRing> getRings(); ArrayList<DENOPTIMEdge> getEdgesWithSrc(DENOPTIMVertex v); ArrayList<DENOPTIMRing> getRingsInvolvingVertex(DENOPTIMVertex v); ArrayList<DENOPTIMRing> getRingsInvolvingVertexID(int vid); boolean hasRings(); boolean isVertexIDInRing(int vid); boolean isVertexInRing(DENOPTIMVertex v); ArrayList<DENOPTIMVertex> getRCVertices(); ArrayList<DENOPTIMVertex> getFreeRCVertices(); ArrayList<DENOPTIMVertex> getUsedRCVertices(); void addEdge(DENOPTIMEdge m_edge); void addRing(DENOPTIMRing m_ring); void addVertex(DENOPTIMVertex m_vertex); void removeVertex(DENOPTIMVertex m_vertex); DENOPTIMVertex getVertexAtPosition(int m_pos); boolean containsVertexId(int vId); DENOPTIMVertex getVertexWithId(int m_vertexId); DENOPTIMVertex getVertexWithId(int m_vertexId, int m_lvl); int getIndexOfVertex(int m_vertexId); void removeVertex(int m_vertexId); void removeEdge(DENOPTIMEdge m_edge); void removeRing(DENOPTIMRing m_ring); DENOPTIMEdge getEdgeAtPosition(int m_pos); int getEdgeCount(); int getRingCount(); int getVertexCount(); @Override String toString(); ArrayList<Integer> getAdjacentVertices(int m_vid); ArrayList<DENOPTIMEdge> getIncidentEdges(DENOPTIMVertex v); ArrayList<DENOPTIMEdge> getIncidentEdges(int vid); int getBondType(int vidSrc, int vidDest, int dapSrc, int dapDest); DENOPTIMVertex getBondingVertex(DENOPTIMVertex vertex, int dapidx, 
                                                String rcn); int getBondingAPIndex(DENOPTIMVertex srcVert, int dapidx, 
                                    DENOPTIMVertex dstVert); ArrayList<Integer> getChildVertices(int m_vid); @Override Object clone(); ArrayList<Integer> getVerticesWithMolId(int m_molId); ArrayList<Integer> getVerticesWithMolId(int m_molId, int m_lvl); int getIndexOfEdgeWithParent(int m_vid); DENOPTIMEdge getEdgeWithParent(int m_vid); ArrayList<Integer> getIndexOfEdgesWithChild(int m_vid); ArrayList<DENOPTIMEdge> getEdgesWithChild(int m_vid); int getMaxLevel(); int getMaxVertexId(); DENOPTIMVertex getParent(int m_vid); int getParentAPIndex(int m_vid); ArrayList<Integer> getFragments(int ftype); void cleanup(); boolean sameAs(DENOPTIMGraph other, StringBuilder reason); }
DENOPTIMGraph implements Serializable, Cloneable { public void removeVertex(DENOPTIMVertex m_vertex) { if (!gVertices.contains(m_vertex)) { return; } int vid = m_vertex.getVertexId(); if (isVertexInRing(m_vertex)) { ArrayList<DENOPTIMRing> rToRm = getRingsInvolvingVertex(m_vertex); for (DENOPTIMRing r : rToRm) { removeRing(r); } } ArrayList<DENOPTIMEdge> lstEdges = this.getEdgeList(); ArrayList<DENOPTIMEdge> eToDel = new ArrayList<>(); for (int i=0; i<lstEdges.size(); i++) { DENOPTIMEdge edge = lstEdges.get(i); if (vid == edge.getTargetVertex()) { eToDel.add(edge); } if (vid == edge.getSourceVertex()) { eToDel.add(edge); } } for (int i=0; i<eToDel.size(); i++) { DENOPTIMEdge edge = eToDel.get(i); int bndOrder = edge.getBondType(); int iA = edge.getSourceDAP(); int srcvid = edge.getSourceVertex(); DENOPTIMVertex src = this.getVertexWithId(srcvid); src.updateAttachmentPoint(iA, bndOrder); int iB = edge.getTargetDAP(); int trgvid = edge.getTargetVertex(); if (this.containsVertexId(trgvid)) { DENOPTIMVertex trg = this.getVertexWithId(trgvid); trg.updateAttachmentPoint(iB, bndOrder); } this.removeEdge(edge); } ArrayList<SymmetricSet> ssToRemove = new ArrayList<SymmetricSet>(); for (SymmetricSet ss : symVertices) { if (ss.contains(vid)) { if (ss.size() < 3) { ssToRemove.add(ss); } else { ss.remove((Integer) vid); } } } symVertices.removeAll(ssToRemove); gVertices.remove(m_vertex); } DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings,
                            ArrayList<SymmetricSet> m_symVerts);  DENOPTIMGraph(ArrayList<DENOPTIMVertex> m_vertices,
                            ArrayList<DENOPTIMEdge> m_edges,
                            ArrayList<DENOPTIMRing> m_rings,
                            ArrayList<ClosableChain> m_closableChains,
                            ArrayList<SymmetricSet> m_symVerts);  DENOPTIMGraph(); void setGraphId(int m_id); int getGraphId(); void setMsg(String m_msg); String getMsg(); boolean hasSymmetricAP(); boolean hasSymmetryInvolvingVertex(int vid); int getSymmetricSetCount(); Iterator<SymmetricSet> getSymSetsIterator(); SymmetricSet getSymSetForVertexID(int vid); void setSymMap(ArrayList<SymmetricSet> m_mp); void addSymmetricSetOfVertices(SymmetricSet m_ss); void updateVertex(DENOPTIMVertex m_vertex); void setVertexList(ArrayList<DENOPTIMVertex> m_vertices); void setEdgeList(ArrayList<DENOPTIMEdge> m_edges); void setRings(ArrayList<DENOPTIMRing> m_rings); void setCandidateClosableChains(ArrayList<ClosableChain> m_closableChains); ArrayList<ClosableChain> getClosableChains(); ArrayList<DENOPTIMVertex> getVertexList(); ArrayList<DENOPTIMEdge> getEdgeList(); ArrayList<DENOPTIMRing> getRings(); ArrayList<DENOPTIMEdge> getEdgesWithSrc(DENOPTIMVertex v); ArrayList<DENOPTIMRing> getRingsInvolvingVertex(DENOPTIMVertex v); ArrayList<DENOPTIMRing> getRingsInvolvingVertexID(int vid); boolean hasRings(); boolean isVertexIDInRing(int vid); boolean isVertexInRing(DENOPTIMVertex v); ArrayList<DENOPTIMVertex> getRCVertices(); ArrayList<DENOPTIMVertex> getFreeRCVertices(); ArrayList<DENOPTIMVertex> getUsedRCVertices(); void addEdge(DENOPTIMEdge m_edge); void addRing(DENOPTIMRing m_ring); void addVertex(DENOPTIMVertex m_vertex); void removeVertex(DENOPTIMVertex m_vertex); DENOPTIMVertex getVertexAtPosition(int m_pos); boolean containsVertexId(int vId); DENOPTIMVertex getVertexWithId(int m_vertexId); DENOPTIMVertex getVertexWithId(int m_vertexId, int m_lvl); int getIndexOfVertex(int m_vertexId); void removeVertex(int m_vertexId); void removeEdge(DENOPTIMEdge m_edge); void removeRing(DENOPTIMRing m_ring); DENOPTIMEdge getEdgeAtPosition(int m_pos); int getEdgeCount(); int getRingCount(); int getVertexCount(); @Override String toString(); ArrayList<Integer> getAdjacentVertices(int m_vid); ArrayList<DENOPTIMEdge> getIncidentEdges(DENOPTIMVertex v); ArrayList<DENOPTIMEdge> getIncidentEdges(int vid); int getBondType(int vidSrc, int vidDest, int dapSrc, int dapDest); DENOPTIMVertex getBondingVertex(DENOPTIMVertex vertex, int dapidx, 
                                                String rcn); int getBondingAPIndex(DENOPTIMVertex srcVert, int dapidx, 
                                    DENOPTIMVertex dstVert); ArrayList<Integer> getChildVertices(int m_vid); @Override Object clone(); ArrayList<Integer> getVerticesWithMolId(int m_molId); ArrayList<Integer> getVerticesWithMolId(int m_molId, int m_lvl); int getIndexOfEdgeWithParent(int m_vid); DENOPTIMEdge getEdgeWithParent(int m_vid); ArrayList<Integer> getIndexOfEdgesWithChild(int m_vid); ArrayList<DENOPTIMEdge> getEdgesWithChild(int m_vid); int getMaxLevel(); int getMaxVertexId(); DENOPTIMVertex getParent(int m_vid); int getParentAPIndex(int m_vid); ArrayList<Integer> getFragments(int ftype); void cleanup(); boolean sameAs(DENOPTIMGraph other, StringBuilder reason);  }