-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGreedyBestFirst.java
More file actions
58 lines (53 loc) · 1.94 KB
/
GreedyBestFirst.java
File metadata and controls
58 lines (53 loc) · 1.94 KB
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
import java.awt.*;
import java.util.ArrayList;
class GreedyBestFirst {
public static ArrayList<Space> findPath(Board board, Point start, Point end) {
ArrayList<Space> path = new ArrayList<Space>();
ArrayList<Space> frontier = new ArrayList<Space>();
ArrayList<Space> visited = new ArrayList<Space>();
Space starter = board.getSpace(start);
Space ender = board.getSpace(end);
starter.setDistFrom(0);
starter.setDistTo(Math.abs(starter.getX()-ender.getX()) + Math.abs(starter.getY() - ender.getY()));
frontier.add(starter);
boolean found = false;
Space curr = starter;
while(!found && !frontier.isEmpty())
{
curr = frontier.remove(0);
System.out.println("[" + curr.getX() + "," + curr.getY() + "] ");
if(curr.getX() == ender.getX() && curr.getY() == ender.getY())
{
found = true;
break;
}
for(Space neighbor : board.getNeighbors(curr))
{
boolean alreadyVisited = false;
if(visited.contains(neighbor))
alreadyVisited = true;
if(frontier.contains(neighbor))
alreadyVisited = true;
if(!alreadyVisited)
{
neighbor.setPrevious(curr);
neighbor.setDistFrom(0);
neighbor.setDistTo(Math.abs(neighbor.getX()-ender.getX()) + Math.abs(neighbor.getY() - ender.getY()));
frontier.add(neighbor);
}
}
frontier.sort(null);
visited.add(curr);
}
if(curr.compareTo(ender) == 0)
{
while(curr.getPrevious() != null)
{
path.add(curr);
curr.setType(SpaceType.PATH);
curr = curr.getPrevious();
}
}
return path;
}
}