diff --git a/622 b/622 new file mode 100644 index 0000000000000000000000000000000000000000..ccd3fb866ddc3da2b15f6905c2a182c05820474b --- /dev/null +++ b/622 @@ -0,0 +1,74 @@ +package com.stack; + + import java.util.Stack; + + ** + * 用栈来实现迷宫的求解 + * @author 刘玲 + * + */ + + class Step{ + int x,y,d; + public Step(int x,int y,int d) { + this.x = x;//横坐标 + this.y = y;//纵坐标 + this.d = d;//方向 + } + } + + public class MazeTest { + + public static void main(String[] args) { + // 迷宫定义 + int[][] maze = {{1,1,1,1,1,1,1,1,1,1}, + {1,0,1,1,1,0,1,1,1,1}, + {1,1,0,1,0,1,1,1,1,1}, + {1,0,1,0,0,0,0,0,1,1}, + {1,0,1,1,1,0,1,1,1,1}, + {1,1,0,0,1,1,0,0,0,1}, + {1,0,1,1,0,0,1,1,0,1}, + {1,1,1,1,1,1,1,1,1,1}}; + int[][] move = {{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; + Stack s = new Stack(); + int a = path(maze, move, s); + while(!s.isEmpty()){ + Step step = s.pop(); + System.out.println(step.x+":"+step.y); + } + } + public static int path(int[][] maze,int[][] move,Stack s){ + Step temp = new Step(1,1,-1); //起点 + s.push(temp); + while(!s.isEmpty()){ + //temp = s.pop(); 这样写是有问题的,不能将出栈的元素作为当前位置,应该将栈顶元素作为当前位置 + s.pop(); //如果路走不通就出栈 + if(!s.isEmpty()){ + temp = s.peek(); //将栈顶元素设置为当前位置 + } + int x = temp.x; + int y = temp.y; + int d = temp.d+1; + while(d<8){ + int i = x + move[d][0]; + int j = y + move[d][1]; + if(maze[i][j] == 0){ //该点可达 + temp = new Step(i,j,d); //到达新点 + s.push(temp); + x = i; + y = j; + maze[x][y] = -1; //到达新点,标志已经到达 + if(x == 6 && y == 1){ + return 1; //到达出口,迷宫有路,返回1 + }else{ + d = 0; //重新初始化方向 + } + }else{ + d++; //改变方向 + } + } + } + return 0; + } + + } \ No newline at end of file