/** * A pair {u,v} of vertices is a split pair if it is an edge in the graph or if it is a separation * pair (it increases the number of connected components) in the graph (graph is no longer * connected if it is removed) * * @param graph * @return */ public List<SplitPair<V, E>> findAllSplitPairs(Graph<V, E> graph) { List<SplitPair<V, E>> ret = new ArrayList<SplitPair<V, E>>(); List<V> excluding = new ArrayList<V>(); List<V> vertices = graph.getVertices(); for (int i = 0; i < vertices.size(); i++) for (int j = i + 1; j < vertices.size(); j++) { V v1 = vertices.get(i); V v2 = vertices.get(j); if (graph.hasEdge(v1, v2)) ret.add(new SplitPair<V, E>(v1, v2)); else { excluding.clear(); excluding.add(v1); excluding.add(v2); if (!graph.isConnected(excluding)) { ret.add(new SplitPair<V, E>(v1, v2)); } } } return ret; }