美文网首页数据结构与算法
回溯算法--八皇后问题

回溯算法--八皇后问题

作者: 暮想sun | 来源:发表于2020-01-10 14:38 被阅读0次

    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();
        }
    

    相关文章

      网友评论

        本文标题:回溯算法--八皇后问题

        本文链接:https://www.haomeiwen.com/subject/zinpactx.html