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 boolean isCycle(DirectedGraph<T> graph, Vertex<T> from) { Set<Edge<T>> edges = graph.getOutgoingEdges(from); for (Edge<T> edge : edges) { Vertex<T> opposite = edge.getOppositeVertex(from); if (isPath(graph, opposite, from)) { // cycle found return true; } } return false; }
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 List<Vertex<T>> traversePath(DirectedGraph<T> graph, Vertex<T> start, Vertex<T> end) { TerminatingVisitor<T> visitor = new TerminatingVisitor<>(end); List<Vertex<T>> path = traverse(graph, start, visitor); if (visitor.wasFound()) { return path; } return Collections.emptyList(); }
public boolean hasCycles(DirectedGraph<T> graph) { for (Vertex<T> vertex : graph.getVertices()) { if (isCycle(graph, vertex)) { return true; } } return false; }
public List<Vertex<T>> traverse(DirectedGraph<T> graph, Vertex<T> start) { return traverse(graph, start, new TrueVisitor<T>()); }
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 boolean isCycle(DirectedGraph<T> graph, Vertex<T> from) { Set<Edge<T>> edges = graph.getOutgoingEdges(from); for (Edge<T> edge : edges) { Vertex<T> opposite = edge.getOppositeVertex(from); if (isPath(graph, opposite, from)) { // cycle found return true; } } return false; }
public List<Vertex<T>> traversePath(DirectedGraph<T> graph, Vertex<T> start, Vertex<T> end) { TerminatingVisitor<T> visitor = new TerminatingVisitor<>(end); List<Vertex<T>> path = traverse(graph, start, visitor); if (visitor.wasFound()) { return path; } return Collections.emptyList(); }
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 boolean hasCycles(DirectedGraph<T> graph) { for (Vertex<T> vertex : graph.getVertices()) { if (isCycle(graph, vertex)) { return true; } } return false; }
public List<Vertex<T>> traverse(DirectedGraph<T> graph, Vertex<T> start) { return traverse(graph, start, new TrueVisitor<T>()); }
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 boolean isCycle(DirectedGraph<T> graph, Vertex<T> from) { Set<Edge<T>> edges = graph.getOutgoingEdges(from); for (Edge<T> edge : edges) { Vertex<T> opposite = edge.getOppositeVertex(from); if (isPath(graph, opposite, from)) { // cycle found return true; } } return false; }
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 boolean hasCycles(DirectedGraph<T> graph) { for (Vertex<T> vertex : graph.getVertices()) { if (isCycle(graph, vertex)) { return true; } } return false; }
public List<Vertex<T>> traverse(DirectedGraph<T> graph, Vertex<T> start) { return traverse(graph, start, new TrueVisitor<T>()); }