-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNode.java
74 lines (64 loc) · 1.87 KB
/
Node.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
import java.util.ArrayList;
public class Node implements Comparable<Node> {
boolean visited, isStart, isEnd, isObstacle, inPath, openList;
double g = 10e5, h = 10e5, t = g + h;
int r, c;
Node parent;
ArrayList<Node> edges = new ArrayList<Node>();
public Node(int r1, int c1) {
r = r1;
c = c1;
}
public double getDistance(Node node) {
return Math.sqrt((node.r - this.r)*(node.r - this.r) + (node.c - this.c)*(node.c - this.c));
}
public boolean isDiagonal(Node node) {
if(node.r == this.r - 1 && node.c == this.c -1)
return true;
if(node.r == this.r - 1 && node.c == this.c +1)
return true;
if(node.r == this.r + 1 && node.c == this.c -1)
return true;
if(node.r == this.r + 1 && node.c == this.c +1)
return true;
return false;
}
public void getEdges(Node[][] nodes) {
if(r - 1 >= 0 && c - 1 >= 0)
edges.add(nodes[r-1][c-1]);
if(r - 1 >= 0)
edges.add(nodes[r-1][c]);
if(r - 1 >= 0 && c + 1 < nodes[0].length)
edges.add(nodes[r-1][c+1]);
if(c - 1 >= 0)
edges.add(nodes[r][c-1]);
if(c + 1 < nodes[0].length)
edges.add(nodes[r][c+1]);
if(r + 1 < nodes.length && c - 1 >= 0)
edges.add(nodes[r+1][c-1]);
if(r + 1 < nodes.length)
edges.add(nodes[r+1][c]);
if(r + 1 < nodes.length && c + 1 < nodes[0].length)
edges.add(nodes[r+1][c+1]);
}
public boolean isNextTo(Node node){
if(r == node.r-1 && c == node.c-1 ||
r == node.r-1 && c == node.c ||
r == node.r-1 && c == node.c+1 ||
r == node.r && c == node.c-1 ||
r == node.r && c == node.c+1 ||
r == node.r+1 && c == node.c-1 ||
r == node.r+1 && c == node.c ||
r == node.r+1 && c == node.c+1)
return true;
return false;
}
@Override
public int compareTo(Node node) {
if (node.t > this.t)
return -1;
if (node.t < this.t)
return 1;
return 0;
}
}