编辑代码

public class Queen {

        // 皇后/棋盘的个数
        private static final int queenNum = 8;
        // 定义一个8 * 8 的棋盘
        private static final int[][] Checkerboard = new int[queenNum][queenNum];
        // 统计放置皇后的摆法
        private static int count = 0;
        // 打印棋盘的摆法
        public static final void show() {
            System.out.println("第" + (++count) + "次摆法");
            for (int i = 0; i < queenNum; i++) {
                for (int j = 0; j < queenNum; j++) {
                    System.out.print(Checkerboard[i][j] + " ");
                }
                System.out.println("");
            }
        }
        public static final boolean check(int row, int col) {
            // 判断当前位置是否有皇后
            for (int i = row - 1; i >= 0; i--) {
                if (Checkerboard[i][col] == 1)
                    return false;
            }
            // 判断左上是否有皇后
            for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
                if (Checkerboard[i][j] == 1)
                    return false;
            }
            // 判断右上是否有皇后
            for (int i = row - 1, j = col + 1; i >= 0 && j < queenNum; i--, j++) {
                if (Checkerboard[i][j] == 1)
                    return false;
            }
            return true;
        }
        //从第n行放置皇后
        public static final void play(int row) {
            for (int i = 0; i < queenNum; i++) {
                // 判断是否能够放置皇后
                if (check(row, i)) {
                    Checkerboard[row][i] = 1;
                    if (row == queenNum - 1) {
                        // 放置完毕 打印皇后
                        show();
                    } else {
                        // 放置下一行
                        play(row + 1);
                    }
                    //回退到当前步骤,把皇后设置为0
                    Checkerboard[row][i] = 0;
                }

            }
        }
        public static void main(String[] args) {
            // 第0行开始
            play(0);
        }
    }