2 qq 34580659 qq_34580659 于 2016.04.12 00:16 提问

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

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

2个回答

CSDNXIAOD
CSDNXIAOD   2016.04.12 00:22

N 皇后问题
N个皇后问题!!!
M*N棋盘上的K皇后问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.12 12: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();
    }

}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!