Monin Liao 2023-01-19 12:04 采纳率: 71.4%
浏览 24

Java N皇后问题详细解题思路

有一个n*n的棋盘,上面有n个皇后。使每个皇后不能互相攻击,有多少种摆法?
样例输入:

10

样例输出:

27

求解题思路

  • 写回答

4条回答 默认 最新

  • Mike Qin 2023-01-19 12:11
    关注

    试试这个

    public class Queen {
        private int n;
        private int[] result;
        private int count;
    
        public Queen(int n) {
            this.n = n;
            result = new int[n];
        }
    
        public void getResult() {
            calQueens(0);
            System.out.println("一共有" + count + "种摆法");
        }
    
        private void calQueens(int row) {
            if (row == n) {
                count++;
                printQueens(result);
                return;
            }
            for (int col = 0; col < n; col++) {
                if (isOk(row, col)) {
                    result[row] = col;
                    calQueens(row + 1);
                }
            }
        }
    
        private boolean isOk(int row, int col) {
            int leftup = col - 1, rightup = col + 1;
            for (int i = row - 1; i >= 0; i--) {
                if (result[i] == col) return false;
                if (leftup >= 0) {
                    if (result[i] == leftup) return false;
                }
                if (rightup < n) {
                    if (result[i] == rightup) return false;
                }
                leftup--;
                rightup++;
            }
            return true;
        }
    
        private void printQueens(int[] result) {
            for (int row = 0; row < n; row++) {
                for (int col = 0; col < n; col++) {
                    if (result[row] == col) System.out.print("Q ");
                    else System.out.print("* ");
                }
                System.out.println();
            }
            System.out.println();
        }
    
        public static void main(String[] args) {
            Queen queen = new Queen(4);
            queen.getResult();
        }
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月19日

悬赏问题

  • ¥15 C++识别堆叠物体异常
  • ¥15 音量自动减小啦!日历自动翻页
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 如何在cst中建立这种螺旋扇叶结构
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?