zoukankan      html  css  js  c++  java
  • 迷宫回溯分析及简单实现

    package com.cai.learn.math;
    
    /**
     * 迷宫回溯:
     * 目标:用递归方法达到指定位置
     */
    public class MazeQuestion {
        public static void main(String[] args) {
            //搭建简单的迷宫
            int[][] maze = new int[8][7];
            //搭建四周 以数字1 表示挡板
            //左右两竖排
            for (int i = 0; i < 8; i++) {
                maze[i][0] = 1;
                maze[i][6] = 1;
            }
            //上下两横排
            for (int i = 0; i < 7; i++) {
                maze[0][i] = 1;
                maze[7][i] = 1;
            }
            //中间设置2个挡格 maze[3][1] maze[3][2]
            maze[3][1] =1;
            maze[3][2] =1;
    
            /*基本形成:
            1    1    1    1    1    1    1
            1    0    0    0    0    0    1
            1    0    0    0    0    0    1
            1    1    1    0    0    0    1
            1    0    0    0    0    0    1
            1    0    0    0    0    0    1
            1    0    0    0    0    0    1
            1    1    1    1    1    1    1
             */
            //目标:从maze[1][1] --->maze[6][5]
            setWay(maze,1,1);
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j <7 ; j++) {
                    System.out.print(maze[i][j]+"	");
                }
                System.out.println();
            }
            /*基本实现 2是所走的路线
            1    1    1    1    1    1    1
            1    2    0    0    0    0    1
            1    2    2    2    0    0    1
            1    1    1    2    0    0    1
            1    0    0    2    0    0    1
            1    0    0    2    0    0    1
            1    0    0    2    2    2    1
            1    1    1    1    1    1    1
             */
        }
        /**
         * 说明:
         * 1.maze表示地图
         * 2.i,j表示开始位置(1.1)
         * 3.如果能移动到位置(7.5),则说明找到
         * 4.约定:0.表示没有走过的路,1表示此路不通,2表示通路可以走,3.表示已经走过但此路不通
         * 5.在走迷宫时,需要一个策略(方法) 下->右->上->左,若果走不通,再回溯
         *
         * @param maze 模拟地图数组
         * @param i 横坐标
         * @param j 纵坐标
         * @return
         */
        public static boolean setWay(int[][] maze,int i,int j){
            if(maze[6][5]==2){
                return true;
            }else{
                if(maze[i][j]==0){//表示未走过
                    //下->右->上->左
                    maze[i][j] = 2;
                    if(setWay(maze,i+1,j)){
                        return true;
                    }else if(setWay(maze,i,j+1)){
                        return true;
                    }else if(setWay(maze,i-1,j)){
                        return true;
                    }else if(setWay(maze,i,j-1)){
                        return true;
                    }else{
                        maze[i][j] = 3;
                        return false;
                    }
                }else{
                    return false;
                }
            }
        }
    }
  • 相关阅读:
    Alpha 冲刺 (7/10)
    Alpha 冲刺 (6/10)
    Alpha 冲刺 (5/10)
    Alpha 冲刺 (4/10)
    福大软工 · BETA 版冲刺前准备(团队)
    福大软工 · 第十一次作业
    Alpha 冲刺 (10/10)
    Alpha 冲刺 (9/10)
    Alpha 冲刺 (8/10)
    Alpha 冲刺 (7/10)
  • 原文地址:https://www.cnblogs.com/cai170221/p/13697157.html
Copyright © 2011-2022 走看看