public void solve(final EncodedCube cube) { this.cube = cube; isInterrupted = false; initStatistics(); stackA[0].setCubeStateA( cube.twist, cube.flip, transform.mEdgePos_to_mEdgePosSet(cube.mEdgePos)); stackA[0].setTurnState(cube.symmetry, turnList); final int ct_ef_d = pruneA.get_twist_flip_startDist(stackA[0].twist, stackA[0].flip); final int ct_meps_d = pruneA.get_twist_mEdgePosSet_startDist(stackA[0].twist, stackA[0].mEdgePosSet); final int ef_meps_d = pruneA.get_flip_mEdgePosSet_startDist(stackA[0].flip, stackA[0].mEdgePosSet); final int ct_d = pruneA.get_twist_startDist(stackA[0].twist); final int ef_d = pruneA.get_flip_startDist(stackA[0].flip); stackA[0].setDists(ct_ef_d, ct_meps_d, ef_meps_d, ct_d, ef_d); for (int maxALength = stackA[0].getMaxDist(); shouldContinueSearchingA(maxALength); maxALength++) { reporter.depthChanged(maxALength); searchA(maxALength); } reportStatistics(); }