您的位置:首页 > 理论基础 > 数据结构算法

数据结构经典算法学习之老鼠走迷宫02

2016-12-29 17:52 441 查看
老鼠走迷宫

基于上一遍博文的基础上,稍作修改,显示所有可达到的最近路线(这里指的最近就是不存在到达出口处还在别的出口来回走,额。。。可能没表达清楚,读者可以自己跑一下程序看看就明白了)

代码实现:

package wj.arithmatic;

public class Mourse {

    int maze[][] = { { 2, 2, 2, 2, 2, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 0, 2, 0, 2, 0, 2 }, { 2, 0, 0, 2, 0, 2, 2 },

            { 2, 2, 0, 2, 0, 2, 2 }, { 2, 0, 0, 0, 0, 0, 2 }, { 2, 2, 2, 2, 2, 2, 2 } };

    public void mourse() {

        // 迷宫图初始化

        for (int i = 0; i < 7; i++) {

            for (int j = 0; j < 7; j++) {

                if (maze[i][j] == 2) {

                    System.out.print("+");

                } else {

                    System.out.print(" ");

                }

            }

            System.out.println();

        }

        // 老鼠起点设置,游戏开始

        find(0, 1);

    }

    // 是否越界

    public boolean isIndexOut(int i, int j) {

        return i < 0 || j > 6;

    }

    // 迷宫路径寻找

    public void find(int i, int j) {

        // 找到任意出口,结束

        if (i == 5 && maze[i][j] == 1) {

            System.out.println("老鼠找到了一条迷宫的出路!");

        }

        

        // 左

        if (!isIndexOut(i, j - 1)) {

            if (maze[i][j - 1] == 0) {

                System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j - 1) + ")");

                times++;

//                    走过的路线填充为1,避免重复

                maze[i][j + 1] = 1;

                find(i, j + 1);

            }

        }

        if (!isIndexOut(i, j + 1)) {

            // 右

            if (maze[i][j + 1] == 0) {

                System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + i + "),(" + (j + 1) + ")");

                times++;

//                    走过的路线填充为1,避免重复

                maze[i][j+1] = 1;

                find(i, j + 1);

            }

        }

        if (!isIndexOut(i-1, j)) {

            //上

            if (maze[i - 1][j] == 0) {

                System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i - 1) + "),(" + j + ")");

                times++;

//                    走过的路线填充为1,避免重复

                maze[i - 1][j] = 1;

                find(i - 1, j);

            }

        }

        if (!isIndexOut(i+ 1, j)) {

            //下

            if (maze[i + 1][j] == 0) {

                System.out.println("第" + times + "步从坐标(" + i + "),(" + j + ")走到坐标(" + (i + 1) + "),(" + j + ")");

                times++;

//                    走过的路线填充为1,避免重复

                maze[i + 1][j] = 1;

                find(i + 1, j);

            }

        }

    }

    public static void main(String args[]) {

        new Mourse().mourse();

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息