untitled1.java

来自「应用JBuilder环境」· Java 代码 · 共 103 行

JAVA
103
字号
package queen;

public class Untitled1 {
    private static char[][] result = new char[8][8];
    private static int sum = 1;
    public static void main(String[] args) {
        for (int i = 0;i < 8;i++)
            for (int j = 0;j < 8;j++)
                result[i][j] = 'X';
        for (int i = 0;i < 8;i++)
            placeQueen(0,i,1);
   }
    private static void print(char[][] result) {
        for (int i = 0;i < 8;i++)
            for (int j = 0;j < 8;j++) {
                if (result[i][j] == 'Q') {
                    System.out.print(" " + j);
                }
            }
        System.out.println();
        System.out.println("  0  1  2  3  4  5  6  7 ");
        System.out.println(" +--+--+--+--+--+--+--+--+");
        for (int i = 0;i < 8;i++) {
            System.out.print("" + i + "|");
            for (int j = 0;j < 8;j++)
                System.out.print("" + result[i][j] + " |");
            System.out.println();
            System.out.println(" +--+--+--+--+--+--+--+--+");
        }
    }
    private static void placeQueen(int x, int y, int queenNumber) {
        if (canPlace(x,y)) {
            result[x][y] = 'Q';
            int m;
            for (m = x + 1;m < 8;m++) {
                int n;
                for (n = 0;n < 8;n++) {
                    placeQueen(m,n,queenNumber + 1);
                }
                if (n == 8 && m > x) {
                    for (int k = 0;k < 8;k++)
                        result[x][k] = 'X';
                        return;
                }
            }
            if (m == 8) {
                System.out.println("第" + sum++ + "种放法:");
                print(result);
                for (int k = 0;k < 8;k++)
                    result[m - 1][k] = 'X';
                return;
            }
        }
        else
            return;
        return;
    }
    private static boolean canPlace(int x,int y) {
        if (x > 7 || y > 7) {
            System.out.println("Wrong Position to place queen!");
            return false;
        }
        int i = 0;
        for (i = 0;i < 8;i++) {
            //正上下方是否有皇后
            if (result[x][i] != 'X')
                return false;
            //正左右是否有皇后
            if (result[i][y] != 'X')
                return false;
        }
        //左上是否有皇后
        i = 0;
        while (x - i >= 0 && y - i >= 0) {
            if (result[x - i][y - i] != 'X')
                return false;
            i++;
        }
        //右上是否有皇后
        i =0;
        while (x - i >= 0 && y + i <=7) {
            if (result[x - i][y + i] != 'X')
                return false;
            i++;
        }
        //右下是否有皇后
        i = 0;
        while (x + i <= 7 && y + i <= 7) {
            if (result[x + i][y + i] != 'X')
                return false;
            i++;
        }
        //左下是否有皇后
        i = 0;
        while (x + i <= 7 && y - i >= 0) {
            if (result[x + i][y - i] != 'X')
                return false;
            i++;
        }
        return true;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?