public Map<Integer, Integer> findSubnetworks() {
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    final AtomicInteger integ = new AtomicInteger(0);
    int locs = g.nodes();
    final GHBitSet bs = new GHBitSetImpl(locs);
    for (int start = 0; start < locs; start++) {
      if (g.isNodeRemoved(start) || bs.contains(start)) continue;

      new XFirstSearch() {
        @Override
        protected GHBitSet createBitSet(int size) {
          return bs;
        }

        @Override
        protected boolean goFurther(int nodeId) {
          boolean ret = super.goFurther(nodeId);
          if (ret) integ.incrementAndGet();
          return ret;
        }
      }.start(g, start, false);
      // System.out.println(start + " MAP "+map.size());
      map.put(start, integ.get());
      integ.set(0);
    }
    return map;
  }