java简单的迷宫问题——堆栈的应用

这篇博客讨论了如何使用Java解决简单的迷宫问题,通过二维数组表示迷宫,并利用堆栈记录老鼠走过的路径。从起点(1,1)出发,当遇到终点(8,10)时,走过的地方标记为2。文中提供了具体的代码实现,展示了老鼠在迷宫中无智能地寻找出路的过程,最终能够显示走出的路线。" 106579112,8389094,Spring框架核心组件解析,"['Java', 'Spring', 'IoC', '容器']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里说一下简单的迷宫问题,老鼠如何在迷宫中起点走到终点,一个二位数组MAZE[][]表示迷宫,MAZE[i][j]=1表示此处有墙,MAZE[i][j]=0表示无墙(可以通过),老鼠走过的路线就将其对应值设置为2,这里提供了一个起点(1,1)和终点(8,10),数组内容如下:
迷宫

上代码!(这里其实没什么智能性,就像是无头苍蝇一样一直撞到出口)

记录老鼠走过的路径
public class TraceRecord {

    public Node first;
    public Node last;

    public boolean isEmpty() {
        return first==null;
    }

    public void insert(int x, int y) {
        Node node = new Node(x, y);
        if(isEmpty()) {
            first = node;
            last = node;
        }
        else {
            last.next = node;
            last = node;
        }
    }

    public void delete() {
        Node node;
        if(isEmpty()) {
            System.out.println("【队列已经空了】");
            return;
        }
        node = first;
        while (node.next != last) {
            node = node.next;
        }
        node.next = last.next;
        last = node;
    }

    class Node {
        int x;
        int y;
        Node next;
        public Node(int x, int y) {
            this.x = x;
            this.y = y;
            this.next = null;
        }
    }
}
老鼠走迷宫
public class Maze {
    //出口坐标
    public static int ExitX = 8;
    public static int ExitY = 10;
    //迷宫
    public static int[][] MAZE = {
            {1,1,1,1,1,1,1,1,1,1,1,1},
            {1,0,0,0,1,1,1,1,1,1,1,1},
            {1,1,1,0,1,1,0,0,0,0,1,1},
            {1,1,1,0,1,1,0,1,1,0,1,1},
            {1,1,1,0,0,0,0,1,1,0,1,1},
            {1,1,1,0,1,1,0,1,1,0,1,1},
            {1,1,1,0,1,1,0,1,1,0,1,1},
            {1,1,1,1,1,1,0,1,1,0,1,1},
            {1,1,0,0,0,0,0,0,1,0,0,1},
            {1,1,1,1,1,1,1,1,1,1,1,1}
    };


    public static void main(String[] args) {
        int i,j,x,y;
        TraceRecord path = new TraceRecord();
        //入口坐标 (开始坐标)
        x=1; y=1;
        System.out.println("【迷宫的路径(0的部分)】");
        for (i=0;i<10;i++) {
            for (j=0;j<12;j++) {
                System.out.print(MAZE[i][j]);
            }
            System.out.println();
        }
        while(x<=ExitX && y<=ExitY) {
            MAZE[x][y] = 2;
            if(MAZE[x-1][y] == 0) {
                x -= 1;
                path.insert(x, y);
            }
            else if (MAZE[x+1][y] == 0) {
                x += 1;
                path.insert(x, y);
            }
            else if(MAZE[x][y-1] == 0) {
                y -= 1;
                path.insert(x, y);
            }
            else if(MAZE[x][y+1] == 0) {
                y += 1;
                path.insert(x, y);
            }
            else if (checkExit(x, y, ExitX, ExitY) == 1) {
                break;
            }
            else {
                MAZE[x][y] = 2;
                path.delete();
                x = path.last.x;
                y = path.last.y;
            }
        }
        System.out.println("【老鼠走过的路径(2的部分)】");
        for(i=0;i<10;i++){
            for(j=0;j<12;j++) {
                System.out.print(MAZE[i][j]);
            }
            System.out.println();
        }
    }

    public static int checkExit(int x, int y, int ex, int ey) {
        if(x==ex && y==ey) {
            if(MAZE[x-1][y]==1 || MAZE[x+1][y]==1 || MAZE[x][y-1]==1 || MAZE[x][y+1]==2)
                return 1;
            if(MAZE[x-1][y]==1 || MAZE[x+1][y]==1 || MAZE[x][y-1]==2 || MAZE[x][y+1]==1) {
                return 1;
            }
            if(MAZE[x-1][y]==1 || MAZE[x+1][y]==2 || MAZE[x][y-1]==1 || MAZE[x][y+1]==1) {
                return 1;
            }
            if(MAZE[x-1][y]==2 || MAZE[x+1][y]==1 || MAZE[x][y-1]==1 || MAZE[x][y+1]==1) {
                return 1;
            }
        }
        return 0;
    }
}

运行结果,是可以看到走出的路线的(值为2的)
运行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值