int[][] map = {{0, 0, 0, 1}, {1, 1, 1, 1}, {1, 0, 0, 0}, {1, 1, 1, 1}}; //地图 地图是为正方形
// 如果要改只要有用到size都要改,主要需要考虑长跟宽 判断大小跟下面的界限都需要重新设置
int size = map.length;
int[][] judge = new int[size][size]; //判断
Stack<Pair<Integer, Integer>> stack = new Stack<Pair<Integer, Integer>>(); //存放出发点
int beginx = 0, beginy = 3;// x<size x>=0 y>=0 y<size 起点,出发点
stack.push(new Pair<Integer, Integer>(beginx, beginy));//默认出发点
int endx = size - 1, endy = size - 1;// 终点设置
while (true) {
if (beginx == endx && beginy == endy) {
break;
}else if(map[beginx][beginy]!=1){
System.out.println("可能是起点错了");
break;
}
Pair<Integer, Integer> peek = stack.peek();
beginx = peek.getKey();
beginy = peek.getValue();
judge[beginx][beginy] = 1;
if (beginx + 1 < size && judge[beginx + 1][beginy] != 1 && map[beginx + 1][beginy] == 1) {
beginx += 1;
stack.push(new Pair<Integer, Integer>(beginx, beginy));
} else if (beginx - 1 >= 0 && judge[beginx - 1][beginy] != 1 && map[beginx - 1][beginy] == 1) {
beginx -= 1;
stack.push(new Pair<Integer, Integer>(beginx, beginy));
} else if (beginy + 1 < size && judge[beginx][beginy + 1] != 1 && map[beginx][beginy + 1] == 1) {
beginy += 1;
stack.push(new Pair<Integer, Integer>(beginx, beginy));
} else if (beginy - 1 >= 0 && judge[beginx][beginy - 1] != 1 && map[beginx][beginy - 1] == 1) {
beginy -= 1;
stack.push(new Pair<Integer, Integer>(beginx, beginy));
} else {
Pair<Integer, Integer> pop = stack.pop();
if(stack.empty()){
System.out.println("没有路,报错");
break;
}
}
}
int n = 1;
for (Pair<Integer, Integer> v : stack) {
Integer x = v.getKey();
Integer y = v.getValue();
System.out.println("第" + n++ + "步 行:" + x + " 列:" + y);
}
下次再添加个功能就是比较全部路径然后选出最小路径