public List<Vertex<T>> getOutgoingAdjacentVertices(Vertex<T> vertex) { return getAdjacentVertices(vertex, true); }
public void remove(Vertex<T> vertex) { List<Edge<T>> edges = new ArrayList<>(getOutgoingEdges(vertex)); for (Edge<T> edge : edges) { removeEdge(edge); } graphVertices.remove(vertex); }
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); }
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 Set<Vertex<T>> getAdjacentVertices(Vertex<T> vertex) { Set<Vertex<T>> adjacentVertices = new HashSet<>(); Set<Edge<T>> incidentEdges = getOutgoingEdges(vertex); if (incidentEdges != null) { for (Edge<T> edge : incidentEdges) { adjacentVertices.add(edge.getOppositeVertex(vertex)); } } return adjacentVertices; }
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 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); }
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 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; }
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 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); }
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(Vertex<T> vertex) { List<Edge<T>> edges = new ArrayList<>(getOutgoingEdges(vertex)); for (Edge<T> edge : edges) { removeEdge(edge); } graphVertices.remove(vertex); }
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; }
public List<Vertex<T>> getOutgoingAdjacentVertices(Vertex<T> vertex) { return getAdjacentVertices(vertex, true); }
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; }
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); }
/** * Returns the outgoing or incoming adjacent vertices for a given vertex * * @param vertex the vertex. * @param outGoing true for returning outgoing vertices. * @return the adjacent vertices */ private List<Vertex<T>> getAdjacentVertices(Vertex<T> vertex, boolean outGoing) { List<Vertex<T>> adjacentVertices = new ArrayList<>(); Set<Edge<T>> edges; if (outGoing) { edges = getOutgoingEdges(vertex); } else { edges = getIncomingEdges(vertex); } for (Edge<T> edge : edges) { Vertex<T> oppositeVertex = edge.getOppositeVertex(vertex); adjacentVertices.add(oppositeVertex); } return adjacentVertices; }