public Edge<T> getEdge(Vertex<T> source, Vertex<T> sink) { Set<Edge<T>> edges = getOutgoingEdges(source); for (Edge<T> edge : edges) { if (edge.getSink() == sink) { return edge; } } return null; }
private Cycle<T> searchCycle(List<Cycle<T>> cycles, Edge<T> edge) { for (Cycle<T> cycle : cycles) { List<Vertex<T>> path = cycle.getOriginPath(); Vertex<T> vertex = path.get(0); if (vertex.equals(edge.getSink())) { return cycle; } } return null; }
private Cycle<T> searchCycle(List<Cycle<T>> cycles, Edge<T> edge) { for (Cycle<T> cycle : cycles) { List<Vertex<T>> path = cycle.getOriginPath(); Vertex<T> vertex = path.get(0); if (vertex.equals(edge.getSink())) { return cycle; } } return null; }
public Edge<T> getEdge(Vertex<T> source, Vertex<T> sink) { Set<Edge<T>> edges = getOutgoingEdges(source); for (Edge<T> edge : edges) { if (edge.getSink() == sink) { return edge; } } return null; }
private Cycle<T> searchCycle(List<Cycle<T>> cycles, Edge<T> edge) { for (Cycle<T> cycle : cycles) { List<Vertex<T>> path = cycle.getOriginPath(); Vertex<T> vertex = path.get(0); if (vertex.equals(edge.getSink())) { return cycle; } } return null; }
public Edge<T> getEdge(Vertex<T> source, Vertex<T> sink) { Set<Edge<T>> edges = getOutgoingEdges(source); for (Edge<T> edge : edges) { if (edge.getSink() == sink) { return edge; } } return null; }
private void removeEdge(Edge<T> edge) { // Remove the edge from the vertices incident edges. Vertex<T> source = edge.getSource(); Set<Edge<T>> sourceEdges = getOutgoingEdges(source); sourceEdges.remove(edge); Vertex<T> sink = edge.getSink(); Set<Edge<T>> sinkEdges = getIncomingEdges(sink); sinkEdges.remove(edge); // Remove the edge from edgeSet graphEdges.remove(edge); }
private void removeEdge(Edge<T> edge) { // Remove the edge from the vertices incident edges. Vertex<T> source = edge.getSource(); Set<Edge<T>> sourceEdges = getOutgoingEdges(source); sourceEdges.remove(edge); Vertex<T> sink = edge.getSink(); Set<Edge<T>> sinkEdges = getIncomingEdges(sink); sinkEdges.remove(edge); // Remove the edge from edgeSet graphEdges.remove(edge); }
private void removeEdge(Edge<T> edge) { // Remove the edge from the vertices incident edges. Vertex<T> source = edge.getSource(); Set<Edge<T>> sourceEdges = getOutgoingEdges(source); sourceEdges.remove(edge); Vertex<T> sink = edge.getSink(); Set<Edge<T>> sinkEdges = getIncomingEdges(sink); sinkEdges.remove(edge); // Remove the edge from edgeSet graphEdges.remove(edge); }
public void remove(Edge<T> edge) { removeEdge(edge); Vertex<T> source = edge.getSource(); Vertex<T> sink = edge.getSink(); VertexHolder sourceHolder = graphVertices.get(source); VertexHolder sinkHolder = graphVertices.get(sink); // remove the edge from the source's outgoing edges sourceHolder.getOutgoingEdges().remove(edge); // remove the edge from the sink's incoming edges sinkHolder.getIncomingEdges().remove(edge); }
public void remove(Edge<T> edge) { removeEdge(edge); Vertex<T> source = edge.getSource(); Vertex<T> sink = edge.getSink(); VertexHolder sourceHolder = graphVertices.get(source); VertexHolder sinkHolder = graphVertices.get(sink); // remove the edge from the source's outgoing edges sourceHolder.getOutgoingEdges().remove(edge); // remove the edge from the sink's incoming edges sinkHolder.getIncomingEdges().remove(edge); }
public void remove(Edge<T> edge) { removeEdge(edge); Vertex<T> source = edge.getSource(); Vertex<T> sink = edge.getSink(); VertexHolder sourceHolder = graphVertices.get(source); VertexHolder sinkHolder = graphVertices.get(sink); // remove the edge from the source's outgoing edges sourceHolder.getOutgoingEdges().remove(edge); // remove the edge from the sink's incoming edges sinkHolder.getIncomingEdges().remove(edge); }
public void add(Edge<T> edge) { if (graphEdges.contains(edge)) { return; } Vertex<T> source = edge.getSource(); Vertex<T> sink = edge.getSink(); if (!graphVertices.containsKey(source)) { add(source); } if ((sink != source) && !graphVertices.containsKey(sink)) { add(sink); } Set<Edge<T>> sourceEdges = getOutgoingEdges(source); sourceEdges.add(edge); if (source != sink) { // avoid adding the edge a second time if the edge points back on itself Set<Edge<T>> sinkEdges = getIncomingEdges(sink); sinkEdges.add(edge); } graphEdges.add(edge); VertexHolder sourceHolder = graphVertices.get(edge.getSource()); VertexHolder sinkHolder = graphVertices.get(edge.getSink()); sourceHolder.getOutgoingEdges().add(edge); sinkHolder.getIncomingEdges().add(edge); }
public void add(Edge<T> edge) { if (graphEdges.contains(edge)) { return; } Vertex<T> source = edge.getSource(); Vertex<T> sink = edge.getSink(); if (!graphVertices.containsKey(source)) { add(source); } if ((sink != source) && !graphVertices.containsKey(sink)) { add(sink); } Set<Edge<T>> sourceEdges = getOutgoingEdges(source); sourceEdges.add(edge); if (source != sink) { // avoid adding the edge a second time if the edge points back on itself Set<Edge<T>> sinkEdges = getIncomingEdges(sink); sinkEdges.add(edge); } graphEdges.add(edge); VertexHolder sourceHolder = graphVertices.get(edge.getSource()); VertexHolder sinkHolder = graphVertices.get(edge.getSink()); sourceHolder.getOutgoingEdges().add(edge); sinkHolder.getIncomingEdges().add(edge); }
public List<Cycle<T>> findCycles(DirectedGraph<T> graph) { List<Cycle<T>> cycles = new ArrayList<>(); for (Edge<T> edge : graph.getEdges()) { List<Vertex<T>> path = getPath(graph, edge.getSink(), edge.getSource()); if (!path.isEmpty()) { Cycle<T> cycle = searchCycle(cycles, edge); if (cycle == null) { cycle = new Cycle<>(); cycle.setOriginPath(path); cycles.add(cycle); } else { cycle.setBackPath(path); } } } return cycles; }
public List<Cycle<T>> findCycles(DirectedGraph<T> graph) { List<Cycle<T>> cycles = new ArrayList<Cycle<T>>(); for (Edge<T> edge : graph.getEdges()) { List<Vertex<T>> path = getPath(graph, edge.getSink(), edge.getSource()); if (!path.isEmpty()) { Cycle<T> cycle = searchCycle(cycles, edge); if (cycle == null) { cycle = new Cycle<T>(); cycle.setOriginPath(path); cycles.add(cycle); } else { cycle.setBackPath(path); } } } return cycles; }
public List<Cycle<T>> findCycles(DirectedGraph<T> graph) { List<Cycle<T>> cycles = new ArrayList<>(); for (Edge<T> edge : graph.getEdges()) { List<Vertex<T>> path = getPath(graph, edge.getSink(), edge.getSource()); if (!path.isEmpty()) { Cycle<T> cycle = searchCycle(cycles, edge); if (cycle == null) { cycle = new Cycle<>(); cycle.setOriginPath(path); cycles.add(cycle); } else { cycle.setBackPath(path); } } } return cycles; }
public DirectedGraph<T> findCycleSubgraph(DirectedGraph<T> graph) { DirectedGraph<T> subGraph = new DirectedGraphImpl<>(); for (Edge<T> edge : graph.getEdges()) { if (isPath(graph, edge.getSink(), edge.getSource())) { subGraph.add(edge); } } return subGraph; }
public DirectedGraph<T> findCycleSubgraph(DirectedGraph<T> graph) { DirectedGraph<T> subGraph = new DirectedGraphImpl<>(); for (Edge<T> edge : graph.getEdges()) { if (isPath(graph, edge.getSink(), edge.getSource())) { subGraph.add(edge); } } return subGraph; }
public DirectedGraph<T> findCycleSubgraph(DirectedGraph<T> graph) { DirectedGraph<T> subGraph = new DirectedGraphImpl<T>(); for (Edge<T> edge : graph.getEdges()) { if (isPath(graph, edge.getSink(), edge.getSource())) { subGraph.add(edge); } } return subGraph; }