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

来源:互联网 发布:劳丽诗雕宝 淘宝店 编辑:程序博客网 时间:2024/06/05 05:35

这里说一下简单的迷宫问题,老鼠如何在迷宫中起点走到终点,一个二位数组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的)
运行结果

0 0
原创粉丝点击