-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMazeSolver.java
72 lines (57 loc) · 1.47 KB
/
MazeSolver.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
import java.util.*;
public abstract class MazeSolver
{
private Maze m;
private boolean solved;
public MazeSolver(Maze maze)
{
m = maze;
makeEmpty();
add(maze.getStart());
}
public abstract void makeEmpty();
public abstract boolean isEmpty();
public abstract void add(Square s);
public abstract Square next();
public String getPath()
{
if(solved == false && isEmpty() == true) return ("unsolvable");
else if(solved == true) return ("solved");
else return ("not yet solved");
}
public boolean isSolved()
{
return solved;
}
public void step()
{
Square next = next();
if(isEmpty())
{
System.out.print("not solvable");
}
else if(next.getType() == Square.EXIT)
{
solved = true;
next.setStatus('.');
return;
}
else
{
List<Square> neigh = m.getNeighbors(next);
for(int i = 0; i < neigh.size(); i++)
{
if(neigh.get(i).getStatus() != 'o' && neigh.get(i).getStatus() != '.' && neigh.get(i).getType() != Square.WALL)
{
add(neigh.get(i));
neigh.get(i).setStatus('o');
}
}
next.setStatus('.');
}
}
public void solve()
{
while(!(isSolved())) step();
}
}