Java解8皇后问题

package algs;

/**
 * Author: areful
 * Date: 2018/8/9
 */
public class Queen8 {
    private static final int MAX_QUEEN = 8;
    private int[] cols = new int[MAX_QUEEN];
    private int num = 0;

    private void calc() {
        getArrangement(0);
        System.out.println(MAX_QUEEN + "皇后问题有" + num + "种摆放方法。");
    }

    private void getArrangement(int n) {
        boolean[] rows = new boolean[MAX_QUEEN];
        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 <= MAX_QUEEN - 1) rows[cols[i] + d] = true;
        }
        for (int i = 0; i < MAX_QUEEN; i++) {
            if (rows[i]) continue;
            cols[n] = i;
            if (n < MAX_QUEEN - 1) {
                getArrangement(n + 1);
            } else {
                num++;
                printChessBoard();
            }
        }
    }

    private void printChessBoard() {
        System.out.println("第" + num + "种走法");
        for (int i = 0; i < MAX_QUEEN; i++) {
            for (int j = 0; j < MAX_QUEEN; j++) {
                if (i == cols[j]) {
                    System.out.print("0 ");
                } else
                    System.out.print(". ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        new Queen8().calc();
    }
}

  

posted on 2019-02-15 06:57  areful  阅读(191)  评论(0编辑  收藏  举报

导航