回溯算法--八皇后问题

8x8 的棋盘,8 个棋子(皇后),每个棋子所在的行、列、对角线都不能有另一个棋子

//全局或成员变量,下标表示行,值表示queen存储在哪一列
    int[] result = new int[8];

    public void cal8queens(int row) {
        if (row == 8) {
            // 8个棋子都放置好了,打印结果
            printQueens(result);
            return;
        }
        // 每一行都有8中放法
        for (int column = 0; column < 8; ++column) {
            //判断是否满足要求
            if (isOk(row, column)) {
                // 第row行的棋子放到了column列
                result[row] = column;
                // 考察下一行
                cal8queens(row + 1);
            }
        }
    }

    ////判断row行column列放置是否合适
    private boolean isOk(int row, int column) {
        int leftup = column - 1, rightup = column + 1;
        // 逐行往上考察每一行
        for (int i = row - 1; i >= 0; --i) {
            //判断i行的column是否有。
            if (result[i] == column) {
                return false;
            }
            //判断左上对角线是否有
            if (leftup >= 0) {
                if (result[i] == leftup) {
                    return false;
                }
            }
            //判断右上对角线是否有
            if (rightup < 8) {
                if (result[i] == rightup) {
                    return false;
                }
            }
            --leftup;
            ++rightup;
        }
        return true;
    }

    private void printQueens(int[] result) { // 打印出一个二维矩阵
        for (int row = 0; row < 8; ++row) {
            for (int column = 0; column < 8; ++column) {
                if (result[row] == column) {
                    System.out.print("Q ");
                } else {
                    System.out.print("* ");
                }
            }
            System.out.println();
        }
        System.out.println();
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我今天好不容易上了一次课,然后数据结构老师给我们留大作业,丧心病狂,先解决一个叫八皇后的问题。 题目背景: 【问题...
    阿里高级软件架构师阅读 8,167评论 1 5
  • 每天坚持做清洁的老人! 做自媒体有一个月了,从最初时的信心满满到如今更新时断时续,收入更是...
    地粟阅读 2,593评论 0 1
  • 你走在我身边 口若悬河 上下四方叫作宇 古往今来叫作宙 还说起 青丘在北 其狐四足九尾 亲爱的 我知你为此刻 灯火...
    苏长亭阅读 3,414评论 76 44
  • 今天在单位讨论起工作中干活的总是那几个人,他们就像黑洞一样,把单位的活儿都给干了,整天无所事事的也总是固定的几个人...
    天清风雨闻阅读 1,621评论 0 0
  • 定时启动作业的方式可以使用oozie的coord来完成,项目工程结构如下,其中swda-wf下的coordinat...
    wangliang938阅读 9,052评论 0 1

友情链接更多精彩内容