/** * Check if the graph is chordal. * * @return true if the graph is chordal, false otherwise. */ public boolean isChordal() { if (chordalGraph == null) { computeMinimalTriangulation(); } return (chordalGraph.edgeSet().size() == graph.edgeSet().size()); }
/** * Create a copy of a graph for internal use. * * @param graph the graph to copy. * @return A copy of the graph projected to a SimpleGraph. */ private static <V, E> UndirectedGraph<V, E> copyAsSimpleGraph(UndirectedGraph<V, E> graph) { UndirectedGraph<V, E> copy = new SimpleGraph<>(graph.getEdgeFactory()); if (graph instanceof SimpleGraph) { Graphs.addGraph(copy, graph); } else { // project graph to SimpleGraph Graphs.addAllVertices(copy, graph.vertexSet()); for (E e : graph.edgeSet()) { V v1 = graph.getEdgeSource(e); V v2 = graph.getEdgeTarget(e); if ((v1 != v2) && !copy.containsEdge(e)) { copy.addEdge(v1, v2); } } } return copy; }