-
Notifications
You must be signed in to change notification settings - Fork 1
/
State.java
145 lines (124 loc) · 2.72 KB
/
State.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import java.util.ArrayList;
public class State implements Comparable<State> {
private Puzzle grid;
private State parent;
private Heuristic heuristic;
private ArrayList<State> children = new ArrayList<State>();
public State(Puzzle g, Heuristic h) {
grid = g;
heuristic = h;
}
public ArrayList<State> generateSuccessors() {
State state;
Puzzle puzzle;
// Up
puzzle = new Puzzle(grid);
if (puzzle.moveTile(0, -1)) {
state = new State(puzzle, new Heuristic(heuristic));
state.setParent(this);
children.add(state);
}
// Down
puzzle = new Puzzle(grid);
if (puzzle.moveTile(0, 1)) {
state = new State(puzzle, new Heuristic(heuristic));
state.setParent(this);
children.add(state);
}
// Left
puzzle = new Puzzle(grid);
if (puzzle.moveTile(-1, 0)) {
state = new State(puzzle, new Heuristic(heuristic));
state.setParent(this);
children.add(state);
}
// Right
puzzle = new Puzzle(grid);
if (puzzle.moveTile(1, 0)) {
state = new State(puzzle, new Heuristic(heuristic));
state.setParent(this);
children.add(state);
}
return children;
}
public void detManhattanGreedyHeuristic(Puzzle goalState) {
if (heuristic != null) {
heuristic.calcManhattanGreedyHeuristic(this, goalState);
}
}
public void detMisplacedGreedyHeuristic(Puzzle goalState) {
if (heuristic != null) {
heuristic.calcMisplacedGreedyHeuristic(this, goalState);
}
}
public int getHeuristicValue() {
if (heuristic != null) {
return heuristic.getHCost();
} else {
return 0;
}
}
public boolean equalTo(State pn) {
return grid.equalTo(pn.getGrid());
}
/**
* @return the grid
*/
public Puzzle getGrid() {
return grid;
}
/**
* @param grid
* the grid to set
*/
public void setGrid(Puzzle grid) {
this.grid = grid;
}
/**
* @return the parent
*/
public State getParent() {
return parent;
}
/**
* @param parent
* the parent to set
*/
public void setParent(State parent) {
this.parent = parent;
}
/**
* @return the heuristic
*/
public Heuristic getHeuristic() {
return heuristic;
}
/**
* @param heuristic
* the heuristic to set
*/
public void setHeuristic(Heuristic heuristic) {
this.heuristic = heuristic;
}
/**
* @return the children
*/
public ArrayList<State> getChildren() {
return children;
}
/**
* @param children
* the children to set
*/
public void setChildren(ArrayList<State> children) {
this.children = children;
}
public int compareTo(State another) {
if (this.getHeuristic().getHCost() < another.getHeuristic().getHCost()) {
return -1;
} else if (this.getHeuristic().getHCost() > another.getHeuristic().getHCost()) {
return 1;
} else
return 0;
}
}