From 6a44b074f0169a1b0f9e92347af929c5e471746e Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Sat, 18 Apr 2015 13:44:44 +0200 Subject: Reorganised projects --- Week6 Sliding game solver/src/Solver.java | 55 +++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Week6 Sliding game solver/src/Solver.java (limited to 'Week6 Sliding game solver/src/Solver.java') diff --git a/Week6 Sliding game solver/src/Solver.java b/Week6 Sliding game solver/src/Solver.java new file mode 100644 index 0000000..9b78f27 --- /dev/null +++ b/Week6 Sliding game solver/src/Solver.java @@ -0,0 +1,55 @@ +import java.util.HashSet; +import java.util.PriorityQueue; +import java.util.Queue; + +/** + * A class that implements a breadth-first search algorithm + * for finding the Configurations for which the isSolution predicate holds + * + * @author Pieter Koopman, Sjaak Smetsers + * @author Camil Staps, s4498062 + */ +@SuppressWarnings("Convert2Diamond") // We disable these warnings for Java <=1.7 compatibility. +public class Solver +{ + // A queue for maintaining graphs that are not visited yet. + private final Queue> toExamine = new PriorityQueue>(); + private final HashSet examined = new HashSet(); + + private Node winner = null; + + public Solver(Configuration g) { + toExamine.add(new Node(null, g)); + } + + /* A skeleton implementation of the solver + * @return a string representation of the solution + */ + public boolean solve () { + while (!toExamine.isEmpty()) { + Node next = toExamine.remove(); + Configuration nextConfiguration = (Configuration) next.getItem(); + examined.add(nextConfiguration); + if (nextConfiguration.isSolution()) { + winner = next; + return true; + } else { + for (Configuration succ: nextConfiguration.successors()) { + if (!examined.contains(succ)) { + toExamine.add(new Node(next, succ)); + } + } + } + } + return false; + } + + /** + * Return the winning Node (from which the path can be reconstructed) + * @return the node in which we found a solution + */ + public Node getWinner() { + return winner; + } + +} -- cgit v1.2.3