/** * {@inheritDoc} */ @Override public Supplier<V> getVertexSupplier() { return base.getVertexSupplier(); }
/** * {@inheritDoc} */ @Override public Supplier<V> getVertexSupplier() { return base.getVertexSupplier(); }
/** * {@inheritDoc} * * <p> * Returns the delegator's vertex supplier or the backing graph's vertex supplier in case of * null. */ @Override public Supplier<V> getVertexSupplier() { if (vertexSupplier != null) { return vertexSupplier; } else { return delegate.getVertexSupplier(); } }
/** * Create a graph type builder which will create the same graph type as the parameter graph. The * new graph will use the same vertex and edge suppliers as the input graph. * * @param graph a graph * @return a type builder * @param <V> the graph vertex type * @param <E> the graph edge type */ public static <V, E> GraphTypeBuilder<V, E> forGraph(Graph<V, E> graph) { GraphTypeBuilder<V, E> builder = forGraphType(graph.getType()); builder.vertexSupplier = graph.getVertexSupplier(); builder.edgeSupplier = graph.getEdgeSupplier(); return builder; }
final Supplier<V> initialSupplier = target.getVertexSupplier(); Supplier<V> rimVertexSupplier = () -> { V vertex = initialSupplier.get();
.vertexSupplier(graph.getVertexSupplier()).allowingMultipleEdges(false) .allowingSelfLoops(false).buildGraph();
this.originalGraph.getVertexSupplier(), this.originalGraph.getEdgeSupplier()), new HashMap<>(), false); Graphs.addGraph(workingGraph, this.originalGraph);
graph.getVertexSupplier(), graph.getEdgeSupplier(), graph.getType().isWeighted()); Graphs.addGraph(eulerGraph, graph); Map<E, GraphPath<V, E>> shortcutEdges = new HashMap<>();
graph.getVertexSupplier(), graph.getEdgeSupplier(), graph.getType().isWeighted()); Graphs.addGraph(eulerGraph, graph); Map<E, GraphPath<V, E>> shortcutEdges = new HashMap<>();
/** * Returns all anticomponents of a graph and a vertex set. * * @param g A Graph * @param Y A set of vertices * @return List of anticomponents of Y in g */ private List<Set<V>> findAllAnticomponentsOfY(Graph<V, E> g, Set<V> Y) { Graph<V, E> target; if (g.getType().isSimple()) target = new SimpleGraph<>( g.getVertexSupplier(), g.getEdgeSupplier(), g.getType().isWeighted()); else target = new Multigraph<>( g.getVertexSupplier(), g.getEdgeSupplier(), g.getType().isWeighted()); new ComplementGraphGenerator<>(g).generateGraph(target); return findAllComponents(target, Y); }
E> extraGraph = GraphTypeBuilder .<V, E> directed().allowingMultipleEdges(true).allowingSelfLoops(true) .edgeSupplier(graph.getEdgeSupplier()).vertexSupplier(graph.getVertexSupplier()) .buildGraph();
/** * 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> Graph<V, E> copyAsSimpleGraph(Graph<V, E> graph) { Graph<V, E> copy = GraphTypeBuilder .<V, E> undirected().edgeSupplier(graph.getEdgeSupplier()) .vertexSupplier(graph.getVertexSupplier()).allowingMultipleEdges(false) .allowingSelfLoops(false).buildGraph(); if (graph.getType().isSimple()) { 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.equals(v2) && !copy.containsEdge(e)) { copy.addEdge(v1, v2); } } } return copy; }
if (g.getType().isSimple()) complementGraph = new SimpleGraph<>( g.getVertexSupplier(), g.getEdgeSupplier(), g.getType().isWeighted()); else complementGraph = new Multigraph<>( g.getVertexSupplier(), g.getEdgeSupplier(), g.getType().isWeighted()); new ComplementGraphGenerator<>(g).generateGraph(complementGraph);
E> resultGraph = GraphTypeBuilder .<V, E> directed().edgeSupplier(graph.getEdgeSupplier()) .vertexSupplier(graph.getVertexSupplier()).allowingMultipleEdges(false) .allowingSelfLoops(true).buildGraph(); for (V v : minSCC) {