Esempio n. 1
0
 /**
  * The kruskal static method runs the Kruskal algorithm given an EdgeList. This in effect returns
  * the minimum spanning tree of a graph (MST).
  *
  * @param edgeList -The collection of edges for a graph.
  * @return -The Collection representing the minimum spanning tree.
  */
 public static Collection<Edge> kruskal(EdgeList edgeList) {
   ArrayList<Edge> mST = new ArrayList<Edge>();
   UnionFind dataStruct = new UnionFind(edgeList);
   PriorityQueue<Edge> edges = edgeList.getEdges();
   while (!edges.isEmpty()) {
     Edge minEdge = edges.poll();
     boolean condition = dataStruct.sameComponent(minEdge.getU(), minEdge.getV());
     if (condition == false) {
       dataStruct.union(minEdge.getU(), minEdge.getV());
       mST.add(minEdge);
     }
   }
   return mST;
 }
Esempio n. 2
0
  public Geometry buffer(Geometry g, double distance) {
    PrecisionModel precisionModel = workingPrecisionModel;
    if (precisionModel == null) precisionModel = g.getPrecisionModel();

    // factory must be the same as the one used by the input
    geomFact = g.getFactory();

    OffsetCurveBuilder curveBuilder = new OffsetCurveBuilder(precisionModel, bufParams);

    OffsetCurveSetBuilder curveSetBuilder = new OffsetCurveSetBuilder(g, distance, curveBuilder);

    List bufferSegStrList = curveSetBuilder.getCurves();

    // short-circuit test
    if (bufferSegStrList.size() <= 0) {
      return createEmptyResultGeometry();
    }

    // BufferDebug.runCount++;
    // String filename = "run" + BufferDebug.runCount + "_curves";
    // System.out.println("saving " + filename);
    // BufferDebug.saveEdges(bufferEdgeList, filename);
    // DEBUGGING ONLY
    // WKTWriter wktWriter = new WKTWriter();
    // Debug.println("Rings: " + wktWriter.write(convertSegStrings(bufferSegStrList.iterator())));
    // wktWriter.setMaxCoordinatesPerLine(10);
    // System.out.println(wktWriter.writeFormatted(convertSegStrings(bufferSegStrList.iterator())));

    computeNodedEdges(bufferSegStrList, precisionModel);
    graph = new PlanarGraph(new OverlayNodeFactory());
    graph.addEdges(edgeList.getEdges());

    List subgraphList = createSubgraphs(graph);
    PolygonBuilder polyBuilder = new PolygonBuilder(geomFact);
    buildSubgraphs(subgraphList, polyBuilder);
    List resultPolyList = polyBuilder.getPolygons();

    // just in case...
    if (resultPolyList.size() <= 0) {
      return createEmptyResultGeometry();
    }

    Geometry resultGeom = geomFact.buildGeometry(resultPolyList);
    return resultGeom;
  }