Java————迷宫问题


它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

 

package algorithm_java; import java.util.Scanner; import java.util.Stack; /** * 路径问题 可以走的最小路径 */

class Node{ public int x; public int y; Node(int x, int y){ this.x = x; this.y = y; } } public class Labyrinth_Path { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int labyrinth[][] = new int[5][5]; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { labyrinth[i][j] = scanner.nextInt(); } } judge(labyrinth); } private static void judge(int[][] labyrinth_1) { int[][] dir = {{1, 0}, {0, 1}}; // 行走的方向
        Stack<Node> stack = new Stack<>(); // 设置一个栈来存储信息
        int [][] visited = new int[5][5]; // 标记是否被访问 和labyrinth大小一致
        Node start = new Node(0, 0); // 开始的节点信息
        Node end = new Node(4, 4); // 结束的位置
        visited[start.x][start.y] = 1; // 将起点信息标记为1
        stack.push(start); // 将起点信息压栈
        while (!stack.isEmpty()){ // 不为空没有找到解
            boolean flag = false; // 标记是否找了一个方向
            Node pek = stack.peek(); if (pek.x == end.x && pek.y == end.y){ break; } else { for (int i = 0; i < 2; i++) { Node nbr = new Node(pek.x + dir[i][0], pek.y + dir[i][1]); // 判断是否满足条件
                    if (nbr.x >= 0 && nbr.x < 5 && nbr.y >= 0 && nbr.y < 5 && labyrinth_1[nbr.x][nbr.y] == 0 && visited[nbr.x][nbr.y] == 0){ stack.push(nbr); visited[nbr.x][nbr.y] = 1; flag = true; break; } } if (flag){ // 找到了方向 就不用执行出栈 一直往下找
                    continue; } stack.pop(); // 两个方向都不可以出栈
 } } Stack<Node> stackRev = new Stack<>(); // 调整栈的内容
        while (!stack.isEmpty()){ stackRev.push(stack.pop()); } while (!stackRev.isEmpty()){ System.out.println("(" + stackRev.peek().x + "," + stackRev.peek().y + " )"); stackRev.pop(); } } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM