public boolean evaluate(Object vertex) { return LoopSearch.this.digraph.hasArc(vertex, vertex); } });
public boolean hasArc(Object origin, Object destination) { return digraph.hasArc(destination, origin); }
for (int k = 0; k < levels[i].length; k++) { VertexWrapper origin = levels[i][k]; double distance = (wrapperDigraph.hasArc(origin, dst) ? 1 : 0); numenator += k * distance; for (int k = 0; k < levels[i].length; k++) { VertexWrapper dst = levels[i][k]; double distance = (wrapperDigraph.hasArc(origin, dst) ? 1 : 0); numenator += k * distance;
private void adjustMovingUp(int lowerLevel) { for (int i = lowerLevel; i >= 0; i--) { for (int j = 0; j < levels[i].length; j++) { VertexWrapper box = levels[i][j]; double numenator = 0; for (int k = 0; k < levels[i + 1].length; k++) { VertexWrapper lowerBox = levels[i + 1][k]; if (wrapperDigraph.hasArc(box, lowerBox)) numenator += lowerBox.getCenterX(); } box.setLowerBarycenter(numenator / box.getLowerConnectivity()); int priority = box.getLowerConnectivity(); if (box.isDummy()) priority = 0;// Integer.MAX_VALUE; double actualMovementDistance = 0; do { double distanceToBarycenter = box.getLowerBarycenter() - box.getCenterX(); if (distanceToBarycenter > movePrecision) { actualMovementDistance = adjustVertexWithinLevel(false, false, levels[i], j, priority, stepSize); } else if (distanceToBarycenter < (-movePrecision)) { actualMovementDistance = adjustVertexWithinLevel(false, true, levels[i], j, priority, stepSize); } else actualMovementDistance = 0; } while (actualMovementDistance > movePrecision); } } }
private void adjustMovingDown(int upperLevel) { for (int i = upperLevel; i < levels.length; i++) { for (int j = 0; j < levels[i].length; j++) { VertexWrapper box = levels[i][j]; double numenator = 0; for (int k = 0; k < levels[i - 1].length; k++) { VertexWrapper upperBox = levels[i - 1][k]; if (wrapperDigraph.hasArc(upperBox, box)) numenator += upperBox.getCenterX(); } box.setUpperBarycenter(numenator / box.getUpperConnectivity()); int priority = box.getUpperConnectivity(); if (box.isDummy()) priority = 0;// Integer.MAX_VALUE; double actualMovementDistance = 0; do { double distanceToBarycenter = box.getUpperBarycenter() - box.getCenterX(); if (distanceToBarycenter > movePrecision) { actualMovementDistance = adjustVertexWithinLevel(true, false, levels[i], j, priority, stepSize); } else if (distanceToBarycenter < (-movePrecision)) { actualMovementDistance = adjustVertexWithinLevel(true, true, levels[i], j, priority, stepSize); } else actualMovementDistance = 0; } while (actualMovementDistance > movePrecision); } } }