private SimpleGraph<DefaultVertex, DefaultEdge<DefaultVertex>> constructLineGraph() {

    SimpleGraph<DefaultVertex, DefaultEdge<DefaultVertex>> lg =
        new SimpleGraph<DefaultVertex, DefaultEdge<DefaultVertex>>(graph.getEdgeFactory());

    HashMap<DefaultVertex, DefaultEdge<DefaultVertex>> map =
        new HashMap<DefaultVertex, DefaultEdge<DefaultVertex>>();

    for (DefaultEdge<DefaultVertex> e : graph.edgeSet()) {
      DefaultVertex v = getMidPoint(e.getSource(), e.getTarget());
      lg.addVertex(v);
      map.put(v, e);
    }

    for (DefaultVertex v1 : lg.vertexSet()) {
      for (DefaultVertex v2 : lg.vertexSet()) {
        if (v1 == v2 || lg.containsEdge(v1, v2)) continue;
        DefaultEdge<DefaultVertex> e1 = map.get(v1);
        DefaultEdge<DefaultVertex> e2 = map.get(v2);

        if (Neighbors.isIncidentEdge(graph, e1, e2)) lg.addEdge(v1, v2);
      }
    }

    return lg;
  }