private boolean search(FreeCellNode node, int depthLimit) { if (System.currentTimeMillis() - timer >= 60000) { // if(FreeCellSolver.scoreNode((FreeCellNode) node) > score){ // System.out.println("Depth " + depthLimit + " node: " + node); // } return false; } nodeCount++; if (node.isGoal()) { goalNode = node; System.out.println(((FreeCellNode) goalNode).moveMade); return true; } if (depthLimit > 0) { for (SearchNode child : node.expand()) { if (!generationHashes.contains(((FreeCellNode) child).getHash())) { generationHashes.add(((FreeCellNode) child).getHash()); int score = FreeCellScorer.scoreNode((FreeCellNode) child); if (score > bestScore && !previousHashes.contains(((FreeCellNode) child).getHash())) { // generationHashes.add(node.getHash()); // System.out.println(generationHashes); bestScore = score; bestNode = (FreeCellNode) child; } if (search((FreeCellNode) child, depthLimit - 1)) { return true; } // else if (depthLimit == 1){ // if(FreeCellSolver.scoreNode((FreeCellNode) child) > score){ // score = FreeCellSolver.scoreNode((FreeCellNode) node); // System.out.printf("D:%d S: %d \n", node.depth, score); // } // } } } } // else{ // int score = FreeCellSolver.scoreNode((FreeCellNode) node); // if(score > bestScore){ // generationHashes.add(node.getHash()); // System.out.println(generationHashes); // bestScore = score; // bestNode = node; // } // if(++nodeCount %1000 == 0) // System.out.println(nodeCount); // } return false; }