【例 3-2】 利用栈实现迷宫的求解 页码P47
package hicc.ds.c02_linear2;
class Step {
public int x, y, d;
public Step(int x, int y, int d) {
this.x = x;
this.y = y;
this.d = d;
}
@Override
public String toString() {
return "(" + x + ", " + y + ", " + d + ")";
}
}
class Item {
public int x, y;
public Item(int x, int y) {
this.x = x;
this.y = y;
}
}
public class StackSolveMaze {
private int m = 6;
private int n = 8;
public int path(int[][] maze, Item[] move) {
SeqStack s = new SeqStack();
int x, y, d, i, j;
Step step = new Step(1, 1, -1);
s.pushSeqStack(step);
while (!s.emptySeqStack()) {
step = (Step) s.popSeqStack();
s.showData();
x = step.x;
y = step.y;
d = step.d + 1;
while (d < 8) {
i = x + move[d].x;
j = y + move[d].y;
if (maze[i][j] == 0) {
step = new Step(x, y, d);
s.pushSeqStack(step);
s.showData();
x = i;
y = j;
maze[x][y] = -1;
if (x == m && y == n) {
s.showData();
return 1;
} else {
d = 0;
}
} else {
d++;
}
}
}
return 0;
}
public static void main(String[] args) {
int[][] maze = new int[][] {
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, //0
{ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 }, //1
{ 1, 1, 0, 1, 0, 1, 1, 1, 1, 1 }, //2
{ 1, 0, 1, 0, 0, 0, 0, 0, 1, 1 }, //3
{ 1, 0, 1, 1, 1, 0, 1, 1, 1, 1 }, //4
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 1 }, //5
{ 1, 0, 1, 1, 0, 0, 1, 1, 0, 1 }, //6
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, //7
};
Item[] move = new Item[] { new Item(0, 1), new Item(1, 1), new Item(1, 0), new Item(1, -1), new Item(0, -1),
new Item(-1, -1), new Item(-1, 0), new Item(-1, 1) };
StackSolveMaze stackSolveMaze = new StackSolveMaze();
stackSolveMaze.path(maze, move);
}
}