diff --git a/src/Assignments/A1/Driver.java b/src/Assignments/A1/Driver.java index 3eafccb..ec8847e 100644 --- a/src/Assignments/A1/Driver.java +++ b/src/Assignments/A1/Driver.java @@ -25,18 +25,15 @@ public class Driver { public static void main(String[] args) { DFS solver = new DFS(); -// Board board = new Board(); -// Board result = solver.dfs(board, 0); -// System.out.println(result); -// Board board = BoardGenerator.generateBoard(); -// -// Board result = solver.dfs(board, 0, new ArrayList()); -// System.out.println(result); -// - int[] temp = {0,8,3,5,1,6,4,7,2}; - Board solvable = new Board(temp); - Board result = solver.dfs(solvable,0, new ArrayList<>()); - System.out.println(result); + Board board = BoardGenerator.generateBoard(); + Board result = solver.dfs(board, 0, new ArrayList<>()); + int count = 0; + while (count != 100 || result != null) { + result = solver.dfs(board, 0, new ArrayList<>()); + System.out.println(count); + count++; + board = BoardGenerator.generateBoard(); + } } } diff --git a/src/Assignments/A1/models/BoardGenerator.java b/src/Assignments/A1/models/BoardGenerator.java index ba05a19..3d0dfcd 100644 --- a/src/Assignments/A1/models/BoardGenerator.java +++ b/src/Assignments/A1/models/BoardGenerator.java @@ -19,69 +19,14 @@ public class BoardGenerator { * @return a board that is solvable. */ public static Board generateBoard() { - - // Creates the initial board with default values. - Integer[] values = {1, 2, 3, 4, 5, 6, 7, 8}; - List random = new ArrayList<>(Arrays.asList(values)); - Collections.shuffle(random); - - Random gen = new Random(); - int spaceLoc = gen.nextInt(9); - int[] pieces = new int[9]; - for (int curr = 0; curr < values.length; curr++) { - pieces[curr] = random.get(curr); - + Board ideal = new Board(); + Random random = new Random(); + int numOfMoves = random.nextInt(30,50); + for (int i = 0; i < numOfMoves; i++) { + List moves = ideal.getMoves(); + Move randomMove = moves.get(random.nextInt(moves.size())); + ideal.swap(randomMove); } - - // Checks if the board is solvable. - Board generated = new Board(pieces); - if (isSolvable(generated)) { - return generated; - } else { // If not it swaps the last two values (ignoring the space) - if (spaceLoc == 8) { - generated.swap(6,7); - } else if (spaceLoc == 7) { - generated.swap(6,8); - } else { - generated.swap(7,8); - } - generated = new Board(pieces); - } - - // Puzzle is now solvable. - return generated; + return ideal; } - - /** - * Checks if the board is solvable by checking the number of inversions. - * If the number of inversions is even, it is solvable, if not it is not solvable. - * - * @precondition board != null - * @postcondition none - * - * @param board the board being checked - * @return if the board has even inversion, True - * if not, False - */ - public static boolean isSolvable(Board board) { - if (board == null) { - return false; - } - - // Holds the number of inversions - int inversions = 0; - int[] ordered = board.pieces; - - // Counts the number of inversions - for (int index = 0; index < 9; index++) { - for (int invers = index+1; invers < 9; invers++) { - if (ordered[index] > ordered[invers]) { - inversions++; - } - } - } - return (inversions % 2 == 0); - } - - } diff --git a/src/Assignments/A1/resources/Parameters.java b/src/Assignments/A1/resources/Parameters.java index 298193b..58767b7 100644 --- a/src/Assignments/A1/resources/Parameters.java +++ b/src/Assignments/A1/resources/Parameters.java @@ -9,6 +9,6 @@ package Assignments.A1.resources; public class Parameters { /* Used to prevent DFS from going down only 1 branch */ - public static final int MAX_DEPTH = 31; // Max number of moves in 8-Puzzle's are 31 moves if solvable. + public static final int MAX_DEPTH = 100; // Max number of moves in 8-Puzzle's are 31 moves if solvable. } diff --git a/src/Assignments/A1/solving_algorithms/DFS.java b/src/Assignments/A1/solving_algorithms/DFS.java index 9416b77..bab8a0e 100644 --- a/src/Assignments/A1/solving_algorithms/DFS.java +++ b/src/Assignments/A1/solving_algorithms/DFS.java @@ -17,7 +17,6 @@ public class DFS { public Board dfs(Board root, int depth, ArrayList visited) { counter++; - System.out.println("Num of boards " + counter + " | Depth " + depth); if (root.equals(solved)) { return root; }