• 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();
            }
        }
    }
  • 相关阅读:
    java DES转C#DES加密解密
    PIE SDK影像格式转换
    PIE SDK位深转换
    PIE SDK存储格式转换
    PIE SDK栅格生成等值线、面
    PIE SDK反距离权重插值算法
    PIE SDK克里金插值法
    PIE SDK热力图
    PIE SDK Alpha通道数据渲染
    PIE SDK 多数据源的复合数据集加载
  • 原文地址:https://www.cnblogs.com/future-dream/p/10695104.html
Copyright © 2020-2023  润新知