diff --git a/src/Assignments/A1/Driver.java b/src/Assignments/A1/Driver.java
index d7079d2..c35a5ff 100644
--- a/src/Assignments/A1/Driver.java
+++ b/src/Assignments/A1/Driver.java
@@ -6,26 +6,23 @@ import Assignments.A1.models.Board;
import Assignments.A1.models.BoardGenerator;
import Assignments.A1.models.BoardNode;
import Assignments.A1.solving_algorithms.BFS;
-import Assignments.A1.solving_algorithms.DFS;
-import Assignments.A1.solving_algorithms.UCS;
import java.util.ArrayList;
import java.util.Date;
-import java.util.Iterator;
-import java.util.concurrent.TimeUnit;
+import java.util.PriorityQueue;
/**
* Board will be used to save locations in a 2D array.
- *
+ *
* The design of the board locations will be numbered like so:
- * 0 1 2
- * 3 4 5
- * 6 7 8
- *
- * 1 2 3
- * 8 0 4
- * 7 6 5
- *
+ * 0 1 2
+ * 3 4 5
+ * 6 7 8
+ *
+ * 1 2 3
+ * 8 0 4
+ * 7 6 5
+ *
* The values will be specified with an int. Must be between (inclusive) 1-8.
* The empty spot will be represented with null.
*/
@@ -35,6 +32,7 @@ public class Driver {
ArrayList timer = new ArrayList<>();
int successes = 0;
int runs = 1;
+ BoardNode node = null;
for (int run = 0; run < runs; run++) {
Board board = BoardGenerator.generateBoard();
// DFS solver = new DFS();
@@ -47,41 +45,71 @@ public class Driver {
long runtime = end.getTime() - start.getTime();
timer.add(runtime);
successes++;
+ node = result;
}
}
long total = 0;
for (int i = 0; i < timer.size(); i++) {
total += timer.get(i);
- System.out.println("Run " + (i+1) + ": " + timer.get(i));
+ System.out.println("Run " + (i + 1) + ": " + timer.get(i));
}
long average = total / (long) timer.size();
System.out.println("Average Runtime: " + average);
System.out.println("Number of successful solves: " + successes + "/" + runs);
- StringBuffer buffer = new StringBuffer();
+ String result = printTotalHierarchy(node);
+ System.out.println(result);
}
- private void print(StringBuilder buffer, BoardNode root) {
- buffer.append(root.board.toString());
- buffer.append("BFS");
- buffer.append('\n');
- for (Iterator it = root.children.iterator(); it.hasNext();) {
- BoardNode next = it.next();
- if (it.hasNext()) {
- buffer.append("├──").append(next.board.toString());
- } else {
- buffer.append(next.board.toString() + "\n└── ").append(next.board.toString() + " ");
- }
- }
- }
-
-
// public static void main(String[] args) {
// int[] values = {1, 2, 3, 8, 0, 5, 4, 7, 6};
// BoardNode node = new BoardNode(new Board(values), null);
// System.out.println(node.heuristic);
// }
+
+ private static String printTotalHierarchy(BoardNode root, int depth, boolean hasMoreChildren) {
+ String result = "";
+ for (int i = 0; i < depth - 1; i++) {
+ result += "│ ";
+ }
+ if (hasMoreChildren) {
+ result += "├── " + root.board.toString() + System.lineSeparator();
+ } else {
+ result += "└── " + root.board.toString() + System.lineSeparator();
+ }
+
+ for (int i = 0; i < root.children.size(); i++) {
+ if (i == root.children.size() - 1) {
+ result += printTotalHierarchy(root.children.get(i), depth+1, false);
+ } else {
+ result += printTotalHierarchy(root.children.get(i), depth+1, true);
+ }
+ }
+ return result;
+ }
+
+ public static String printTotalHierarchy(BoardNode solved) {
+ BoardNode root = null;
+ while (solved.parent != null) {
+ solved = solved.parent;
+ }
+ root = solved;
+
+ String result = root.board.toString() + System.lineSeparator();
+ if (root.children.size() == 1) {
+ result += printTotalHierarchy(root.children.get(0), 1, false);
+ } else {
+ for (int i = 0; i < root.children.size(); i++) {
+ if (i == root.children.size() - 1) {
+ result += printTotalHierarchy(root.children.get(i), 1, false);
+ } else {
+ result += printTotalHierarchy(root.children.get(i), 1, true);
+ }
+ }
+ }
+ return result;
+ }
}
diff --git a/src/Assignments/A1/solving_algorithms/AStar.java b/src/Assignments/A1/solving_algorithms/AStar.java
index 28dcc32..169081d 100644
--- a/src/Assignments/A1/solving_algorithms/AStar.java
+++ b/src/Assignments/A1/solving_algorithms/AStar.java
@@ -13,7 +13,7 @@ public class AStar {
private final Board solved = new Board();
private final HashSet visited = new HashSet<>();
- public Board traverse(Board root) {
+ public BoardNode traverse(Board root) {
PriorityQueue boards = new PriorityQueue<>(new UCSPriority());
boards.add(new BoardNode(root, null));
BoardNode node = null;
@@ -32,7 +32,7 @@ public class AStar {
boards.add(new BoardNode(child, node));
}
}
- return node.board;
+ return node;
}
}
diff --git a/src/Assignments/A1/solving_algorithms/UCS.java b/src/Assignments/A1/solving_algorithms/UCS.java
index 6fcabab..5fd307a 100644
--- a/src/Assignments/A1/solving_algorithms/UCS.java
+++ b/src/Assignments/A1/solving_algorithms/UCS.java
@@ -13,9 +13,7 @@ public class UCS {
private final Board solved = new Board();
private final HashSet visited = new HashSet<>();
- public BoardNode test = null;
-
- public Board traverse(Board root) {
+ public BoardNode traverse(Board root) {
PriorityQueue boards = new PriorityQueue<>(new UCSPriority());
boards.add(new BoardNode(root, null));
BoardNode node = null;
@@ -34,8 +32,7 @@ public class UCS {
boards.add(new BoardNode(child, node));
}
}
- test = node;
- return node.board;
+ return node;
}
}