zoukankan      html  css  js  c++  java
  • Java实现迷宫和八皇后

    该文章主要是介绍两个递归的demo(迷宫问题和八皇后)

    迷宫问题

    /**
     * @desc 迷宫问题
     * 1.初始化一个8行7列的矩阵 map[8][7]
     * 2.假设:
     * (1)三种类型:0-还没有走,1-档板,2-可以走(已走),3-走不通
     * (2)策略:下-》右-》下-》左
     * (3)初始值:周围都是1
     * 3.过程分析:
     * (1)已经找到(确定找到的条件:第7行6列即为找到 =》 [6,5]=2)
     * (2)还没有找到按策略去找
     *
     * @Author xw
     * @Date 2019/9/3
     */
    public class MingGong {
        public static void main(String[] args) {
            // 1.初始化一个8行7列的矩阵arr[8][7]
            int[][] map = new int[8][7];
            // 2.初始值:周围都是1
            // 第1行和第8行设置档板
            for (int j = 0; j < 7; j++) {
                map[0][j] = 1;
                map[7][j] = 1;
            }
            // 第1列和第7列设置档板
            for (int i = 0; i < 8; i++) {
                map[i][0] = 1;
                map[i][6] = 1;
            }
            // 输出矩阵
            print(map);
            System.out.println("-------------------------");
            // 设置档板 [3,1]=1,[3,2]=1
            map[3][1] = 1;
            map[3][2] = 1;
            print(map);
            // 策略:下-》右-》上-》左
            setWay(map, 1, 1); // 从[1,1]这个位置开始
            System.out.println("策略:下-》右-》上-》左 =>");
            print(map);
        }
    }

    八皇后

    /**
     * @desc 8皇后问题
     * 1.是什么?
     *  8x8的矩阵,任意两个位置不能处于同一行、同一列或同一斜线,能找出多少种解法,这就是8皇后问题
     * 2.思路分析
     * (1)第一个皇后放第一行第一列[0,0]
     * (2)第二个皇后放第二行第一列[1,0]...直到判断ok,
     *      如果不ok,继续放在第二列、第三列、依次把所有列放完,找到一个合适位置
     * (3)继续第三个皇后,还是第一列、第二列...直到第8个皇后也放在一个不冲突的位置,
     *      算是找到一个正确解
     * (4)当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后,放在第一列的所有正确解,全部得到
     * (5)然后回头继续第一个皇后放第二列,后面继续循环执行1-4步骤
     * 3.说明
     *  理论上创建一个二维数组来表示一个棋盘,但实际上可以通过算法,
     *  用一个一维数组即可解决 arr[8] = {0, 4, 7, 5, 2, 6, 1, 3}
     *  // arr[0] = 0 表示第1个皇后(第一行)放在第1列,即[0,0]
     *  // arr[1] = 4 表示第2个皇后(第二行)放在第5列,即[1,4]
      * 下标表示第几行 即第几个皇后
     *  arr[i] = val,val表示第i+1个皇后放在第i+1行的第val+1列
     * @Author xw
     * @Date 2019/9/4
     */
    public class Queen8 {
        private int max;
        private int[] arr;
        private int count;
        public Queen8(int max) {
            this.max = max;
            this.arr = new int[max];
        }
        public static void main(String[] args) {
            for (int i = 0; i < 8; i++) {
                System.out.print(String.format("R%s	", i+1));
            }
            System.out.println();
            Queen8 queen8 = new Queen8(8);
            queen8.check(0);
            System.out.println(String.format("共有%s种解法", queen8.count));
        }
    }

    gitee地址:https://gitee.com/linestyle007/jucdemo2

    博客地址:https://linestyle007.gitee.io/

    github地址:https://github.com/line007/jucdemo2

      

  • 相关阅读:
    实现可折叠的列表
    ajax知识点补充
    Ajax 完整教程
    从页面左边飞入页面动画效果
    文字闪烁
    点击按钮之后等待60秒
    [SCOI2016]萌萌哒
    [HNOI2011]卡农
    [NOI2015]寿司晚宴
    【bzoj 3489】A simple rmq problem
  • 原文地址:https://www.cnblogs.com/ice-line/p/11753391.html
Copyright © 2011-2022 走看看