qq_34580659 2016-04-11 16:16 采纳率: 9.1%
浏览 1538

个C++中皇后问题的题。在n*n棋盘中如何摆n个皇后使其互相都不挡道?用java写可以吗!?怎么写?

个C++中皇后问题的题。在n*n棋盘中如何摆n个皇后使其互相都不挡道?用java写可以吗?怎么写?

  • 写回答

1条回答 默认 最新

  • 毕小宝 博客专家认证 2016-04-12 04:55
    关注

    皇后问题的实现,参考:

     public class Queen8 {
        public static int num = 0; // 累计方案总数
        public static final int MAXQUEEN = 8;// 皇后个数,同时也是棋盘行列总数
        public static int[] cols = new int[MAXQUEEN]; // 定义cols数组,表示8列棋子摆放情况
    
        public Queen8() {
            // 核心函数
            getArrangement(0);
            System.out.print("/n");
            System.out.println(MAXQUEEN + "皇后问题有" + num + "种摆放方法。");
        }
    
        public void getArrangement(int n) {
            // 遍历该列所有不合法的行,并用rows数组记录,不合法即rows[i]=true
            boolean[] rows = new boolean[MAXQUEEN];
            for (int i = 0; i < n; i++) {
                rows[cols[i]] = true;
                int d = n - i;
                if (cols[i] - d >= 0)
                    rows[cols[i] - d] = true;
                if (cols[i] + d <= MAXQUEEN - 1)
                    rows[cols[i] + d] = true;
    
            }
            for (int i = 0; i < MAXQUEEN; i++) {
                // 判断该行是否合法
                if (rows[i])
                    continue;
                // 设置当前列合法棋子所在行数
                cols[n] = i;
                // 当前列不为最后一列时
                if (n < MAXQUEEN - 1) {
                    getArrangement(n + 1);
                } else {
    
                    // 累计方案个数
                    num++;
                    // 打印棋盘信息
                    printChessBoard();
                }
    
            }
    
        }
    
        public void printChessBoard() {
    
            System.out.print("第" + num + "种走法 \n");
    
            for (int i = 0; i < MAXQUEEN; i++) {
                for (int j = 0; j < MAXQUEEN; j++) {
                    if (i == cols[j]) {
                        System.out.print("0 ");
                    } else
                        System.out.print("+ ");
                }
                System.out.print("\n");
            }
    
        }
    
        public static void main(String args[]) {
            Queen8 queen = new Queen8();
        }
    
    }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建