package search;
import java.util.Iterator;
import java.util.List;
public class SearchProgram {
/**
* @param args
*/
public static void main(String[] args) {
if (args.length < 3) {
System.out.println("Arguments are:");
System.out.println(" algorithm: dls, bfs or astar");
System.out.println(" puzzle: 5Puzzle, coins, water or 8Queens");
System.out.println(" startString: start state description for puzzle");
System.out.println(" depth: depth of search for dls");
return;
}
String algString = args[0];
String puzzleString = args[1];
String stateString = args[2];
ProblemGraph puzzle = null;
if (puzzleString.equals("5Puzzle")) {
puzzle = new FivePuzzle();
}
else if (puzzleString.equals("coins")) {
puzzle = new CoinPuzzle();
}
else if (puzzleString.equals("water")) {
puzzle = new JugsPuzzle();
}
else if (puzzleString.equals("8Queens")) {
puzzle = new EightQueensPuzzle();
}
else {
System.out.println("Invalid puzzle choice.");
return;
}
Search algorithm = null;
if (algString.equals("dls")) {
if (args.length < 4) {
System.out.println("Error: dls requires a depth parameter.");
}
String depthString = args[3];
int depth = Integer.parseInt(depthString);
algorithm = new DepthLimitedSearch(depth);
} else if (algString.equals("bfs")) {
algorithm = new BreadthFirstSearch();
} else if (algString.equals("astar")) {
algorithm = new AStarSearch();
} else {
System.out.println("Invalid algorithm choice.");
return;
}
List<State> result = algorithm.pathSearch(puzzle, stateString);
if(result != null) {
String output = ")";
for (Iterator<State> iter = result.iterator(); iter.hasNext();) {
State element = iter.next();
output = element.toString() + output;
}
output = "(" + output;
System.out.println(output);
} else {
System.out.println("The search did not result in a solution.");
}
}
}