-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDungeon.java
More file actions
95 lines (77 loc) · 2.33 KB
/
Dungeon.java
File metadata and controls
95 lines (77 loc) · 2.33 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
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
import java.util.Queue;
import java.util.LinkedList;
public class Dungeon {
private Integer[][] delta = new Integer[4][2];
private Queue<Integer> xQ = new LinkedList<>();
private Queue<Integer> yQ = new LinkedList<>();
private Boolean[] visitedX = new Boolean[10];
private Boolean[] visitedY = new Boolean[10];
private Integer[] pathX = new Integer[10];
private Integer[] pathY = new Integer[10];
public Dungeon() {
delta[0] = new Integer[] {1, 0};
delta[1] = new Integer[] {0, 1};
delta[2] = new Integer[] {-1, 0};
delta[3] = new Integer[] {0, -1};
for (int i = 0; i < 10; i++) {
visitedX[i] = false;
visitedY[i] = false;
}
}
public Boolean shortestPath(Character[][] dungeon, Integer[] source, Integer[] dest) {
if (dungeon == null || source == null || dest == null)
return false;
xQ.add(source[0]);
yQ.add(dest[0]);
visitedX[0] = true;
visitedY[0] = true;
while(!xQ.isEmpty() && !yQ.isEmpty()) {
Integer x = xQ.remove();
Integer y = yQ.remove();
for (int i = 0; i < 4; i++) {
Integer nx = x + delta[i][0];
Integer ny = y + delta[i][1];
if (nx < 0 || nx > 4)
continue;
if (ny < 0 || ny > 4)
continue;
if (dungeon[nx][ny] == '#')
continue;
if (!visitedX[nx] && !visitedY[ny]) {
visitedX[nx] = true;
visitedY[ny] = true;
pathX[nx] = x;
pathY[ny] = y;
}
}
}
if (pathX[dest[0]] != null && pathY[dest[1]] != null)
return true;
else
return false;
}
public Integer[] getPathX() {
return pathX;
}
public Integer[] getPathY() {
return pathY;
}
public static void main(String[] args) {
Character[][] dungeon = new Character[5][5];
dungeon[0] = new Character[] {' ', ' ', '#', ' ', '#'};
dungeon[1] = new Character[] {'#', ' ', ' ', '#', '#'};
dungeon[2] = new Character[] {' ', '#', ' ', ' ', '#'};
dungeon[3] = new Character[] {' ', '#', ' ', ' ', ' '};
dungeon[4] = new Character[] {' ', '#', ' ', '#', ' '};
Integer[] source = new Integer[] {0, 0};
Integer[] dest = new Integer[] {4, 4};
Dungeon d = new Dungeon();
Boolean isThereAPath = d.shortestPath(dungeon, source, dest);
if (isThereAPath) {
System.out.println("There is a path! The path is:");
for (int x = 4, y = 4; x >= 0 && y >= 0; x = d.getPathX()[x], y = d.getPathY()[y]) {
System.out.println("(" + x + ", " + y + ")");
}
}
}
}