Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.58 KB | None | 0 0
  1. package hw3.puzzle;
  2. import edu.princeton.cs.algs4.MinPQ;
  3. import java.util.ArrayList;
  4.  
  5.  
  6. /**
  7. * Created by Tim on 3/20/17.
  8. */
  9. public class Solver {
  10.  
  11. private ArrayList<WorldState> solution;
  12. MinPQ<SearchNode> priorityQueue;
  13.  
  14. public Solver(WorldState initial) {
  15. priorityQueue = new MinPQ();
  16. SearchNode currentNode = new SearchNode(initial);
  17. solution = new ArrayList<WorldState>();
  18. priorityQueue.insert(currentNode);
  19.  
  20. //ALGORITHM
  21. while (!priorityQueue.min().currentWorldState.isGoal()) {
  22. currentNode = priorityQueue.delMin();
  23. solution.add(currentNode.currentWorldState);
  24. for (WorldState x : currentNode.currentWorldState.neighbors()) {
  25. if (currentNode.preNode != null) { //if it's not the starting word
  26. if (!x.equals(currentNode.preNode.currentWorldState)) { //making sure there's no backtracking
  27. priorityQueue.insert(new SearchNode(x, currentNode.preMoves + 1, currentNode));
  28. }
  29. } else {
  30. priorityQueue.insert(new SearchNode(x, currentNode.preMoves + 1, currentNode));
  31. }
  32. }
  33. if (priorityQueue.min().currentWorldState.isGoal()) {
  34. solution.add(priorityQueue.min().currentWorldState);
  35. }
  36. }
  37. }
  38.  
  39. public int moves() {
  40. return priorityQueue.min().preMoves;
  41. }
  42.  
  43. public Iterable<WorldState> solution() {
  44. return solution;
  45. }
  46.  
  47. private class SearchNode implements Comparable<SearchNode> {
  48.  
  49. public WorldState currentWorldState;
  50. public int preMoves;
  51. public SearchNode preNode;
  52.  
  53. //beginning search node
  54. public SearchNode(WorldState worldState1) {
  55. this(worldState1, 0, null);
  56. }
  57.  
  58. //generic search node
  59. public SearchNode(WorldState worldState1, int preMoves1, SearchNode preNode1) {
  60. currentWorldState = worldState1;
  61. preMoves = preMoves1;
  62. preNode = preNode1;
  63. }
  64.  
  65. @Override
  66. public int compareTo(SearchNode one) {
  67. if (one.currentWorldState.estimatedDistanceToGoal() + preMoves < this.currentWorldState.estimatedDistanceToGoal() + preMoves) {
  68. return 1;
  69. } else if (one.currentWorldState.estimatedDistanceToGoal() + preMoves > this.currentWorldState.estimatedDistanceToGoal() + preMoves) {
  70. return -1;
  71. } else {
  72. return 0;
  73. }
  74. }
  75.  
  76. }
  77.  
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement