Example #1
0
  /**
   * 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;
  }