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 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多