/****************************************************************************** * Compilation: javac PuzzleChecker.java * Execution: java PuzzleChecker filename1.txt filename2.txt ... * Dependencies: Board.java Solver.java * * This program creates an initial board from each filename specified * on the command line and finds the minimum number of moves to * reach the goal state. * * % java PuzzleChecker puzzle[0-9][0-9].txt * filename moves time * ------------------------------------------ * puzzle00.txt 0 0.09 * puzzle01.txt 1 0.01 * puzzle02.txt 2 0.00 * puzzle03.txt 3 0.00 * puzzle04.txt 4 0.00 * puzzle05.txt 5 0.00 * puzzle06.txt 6 0.00 * ............ .. .... * puzzle46.txt 46 0.56 * puzzle47.txt 47 15.52 * puzzle48.txt 48 1.07 * puzzle49.txt 49 33.65 * puzzle50.txt 50 9.18 * ******************************************************************************/ import edu.princeton.cs.algs4.In; import edu.princeton.cs.algs4.StdOut; import edu.princeton.cs.algs4.Stopwatch; public class PuzzleChecker { public static void main(String[] args) { // header StdOut.printf("%-25s %7s %8s\n", "filename", "moves", "time"); StdOut.println("------------------------------------------"); // for each command-line argument for (String filename : args) { // read in the board specified in the filename In in = new In(filename); int n = in.readInt(); int[][] blocks = new int[n][n]; for (int row = 0; row < n; row++) for (int col = 0; col < n; col++) blocks[row][col] = in.readInt(); Board initial = new Board(blocks); // check if puzzle is solvable; if so, solve it print out number of moves if (initial.isSolvable()) { Stopwatch timer = new Stopwatch(); Solver solver = new Solver(initial); int moves = solver.moves(); double time = timer.elapsedTime(); StdOut.printf("%-25s %7d %8.2f\n", filename, moves, time); } // if not, print that it is unsolvable else { StdOut.printf("%-25s unsolvable\n", filename); } } } }