java实现八皇后问题

1.java中可以使用标号来进行标注,标号可以用来标识除了变量声明语句之外的任何有效语句。

2. 八皇后问题的java实现:

8X8国际象棋上摆放八个皇后,任意两个皇后不能处于同一行,同一列,同一个对角线上,一共有多少种摆法?

Java实现:

Size来表示皇后数目和棋盘大小,下面的算法适用于任意数目的皇后。

·location数组:皇后在棋盘每行上列的位置。数组长度为size,location[i] = j,表示在第i行,第j列摆放了一个皇后。

·colsOccupied数组:皇后在棋盘上占据的列,数组长度是size,colsOccupied[j]=1,表示皇后占据了第j列。

·cross1Occupied数组:皇后在棋盘上占据的正对角线,数组长度为2*size,cross1Occupied[i-j+size-1] = 1表示皇后占据了某一条正对角线。

·cross2Occupied数组:皇后在棋盘上占据的反对角线,数组长度为2*size。

cross1Occupied[i+j]=1,表示皇后占据了一条反对角线。

判断流程:

循环测试从第0列到第size-1列能否摆放皇后,在每一次的巡皇中,先测试当前位置(i,j)是否被占领,即所在列和对角线上是否有其他的皇后。如果当前位置没有被占领,就宣布占领



源代码如下所示:

public class Queen {

private final int size;//棋盘的大小

    private int[]location;//皇后在棋盘上每行上的列的位置

    private int[]colsOccupied;//皇后在棋盘上占据的列

    private int[]cross1Occupied;//皇后在棋盘上占据的正对角线

    private int[]cross2Occupied;//皇后在棋盘上占据的反对角线

    private static int count;//解决方案的个数

    private static final int STATUS_OCCUPIED=1;//占领状态

    private static final int STATUS_OCCUPY_CANCELED =0;//未占领状态

    public Queen(int size){

//初始化

        this.size = size;

        location =new int[size];

        colsOccupied =new int[size];

        cross1Occupied =new int[2*size];

        cross2Occupied =new int[2*size];

    }

public void printLocation(){

System.out.println("以下是皇后在棋盘上的第"+count+"种摆放位置");

        for (int i =0;i

System.out.println("行"+i+"列:"+location[i]);

    }

//判断i,j位置是否被占领

    private boolean isOccupied(int i,int j){

return (colsOccupied[j] ==1)

||(cross1Occupied[i-j+size-1]==1)

||(cross2Occupied[i+j]==1);

    }

//如果flag为1,表示占领位置(i,j)

//如果是零,则表示取消占领的位置

    private void setStatus(int i,int j,int flag){

colsOccupied[j] = flag;//占领或取消第j列

        cross1Occupied[i-j+size-1] = flag;//占领或取消正对角线

        cross2Occupied[i+j] = flag;//占领或者取消占领反对角线

    }

//从第i列开始摆放皇后

    public void place(int i){

for (int j =0;j

            if (!isOccupied(i,j)){//判断位置是否被占领

            location[i] = j;//摆放

            setStatus(i,j,STATUS_OCCUPIED);//宣布占领

            if (i

                place(i+1);

            else{

count++;//统计解决方案的个数

                printLocation();//完成任务,打印所有的皇后

            }

//回溯,撤销占领的位置

            setStatus(i,j,STATUS_OCCUPY_CANCELED);

            }

}

public void start(){

place(0);

    }

public static void main(String[] args){

new Queen(8).start();

    }

}



程序运行打印结果如下所示:


"C:\Program Files\Java\jdk-9.0.4\bin\java" "-javaagent:D:\intelij idea\IntelliJ IDEA Community Edition 2018.1\lib\idea_rt.jar=63517:D:\intelij idea\IntelliJ IDEA Community Edition 2018.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\a'su's\TestDemo\out\production\TestDemo Queen

以下是皇后在棋盘上的第1种摆放位置

行0列:0

行1列:4

行2列:7

行3列:5

行4列:2

行5列:6

行6列:1

行7列:3

以下是皇后在棋盘上的第2种摆放位置

行0列:0

行1列:5

行2列:7

行3列:2

行4列:6

行5列:3

行6列:1

行7列:4

以下是皇后在棋盘上的第3种摆放位置

行0列:0

行1列:6

行2列:3

行3列:5

行4列:7

行5列:1

行6列:4

行7列:2

以下是皇后在棋盘上的第4种摆放位置

行0列:0

行1列:6

行2列:4

行3列:7

行4列:1

行5列:3

行6列:5

行7列:2

以下是皇后在棋盘上的第5种摆放位置

行0列:1

行1列:3

行2列:5

行3列:7

行4列:2

行5列:0

行6列:6

行7列:4

以下是皇后在棋盘上的第6种摆放位置

行0列:1

行1列:4

行2列:6

行3列:0

行4列:2

行5列:7

行6列:5

行7列:3

以下是皇后在棋盘上的第7种摆放位置

行0列:1

行1列:4

行2列:6

行3列:3

行4列:0

行5列:7

行6列:5

行7列:2

以下是皇后在棋盘上的第8种摆放位置

行0列:1

行1列:5

行2列:0

行3列:6

行4列:3

行5列:7

行6列:2

行7列:4

以下是皇后在棋盘上的第9种摆放位置

行0列:1

行1列:5

行2列:7

行3列:2

行4列:0

行5列:3

行6列:6

行7列:4

以下是皇后在棋盘上的第10种摆放位置

行0列:1

行1列:6

行2列:2

行3列:5

行4列:7

行5列:4

行6列:0

行7列:3

以下是皇后在棋盘上的第11种摆放位置

行0列:1

行1列:6

行2列:4

行3列:7

行4列:0

行5列:3

行6列:5

行7列:2

以下是皇后在棋盘上的第12种摆放位置

行0列:1

行1列:7

行2列:5

行3列:0

行4列:2

行5列:4

行6列:6

行7列:3

以下是皇后在棋盘上的第13种摆放位置

行0列:2

行1列:0

行2列:6

行3列:4

行4列:7

行5列:1

行6列:3

行7列:5

以下是皇后在棋盘上的第14种摆放位置

行0列:2

行1列:4

行2列:1

行3列:7

行4列:0

行5列:6

行6列:3

行7列:5

以下是皇后在棋盘上的第15种摆放位置

行0列:2

行1列:4

行2列:1

行3列:7

行4列:5

行5列:3

行6列:6

行7列:0

以下是皇后在棋盘上的第16种摆放位置

行0列:2

行1列:4

行2列:6

行3列:0

行4列:3

行5列:1

行6列:7

行7列:5

以下是皇后在棋盘上的第17种摆放位置

行0列:2

行1列:4

行2列:7

行3列:3

行4列:0

行5列:6

行6列:1

行7列:5

以下是皇后在棋盘上的第18种摆放位置

行0列:2

行1列:5

行2列:1

行3列:4

行4列:7

行5列:0

行6列:6

行7列:3

以下是皇后在棋盘上的第19种摆放位置

行0列:2

行1列:5

行2列:1

行3列:6

行4列:0

行5列:3

行6列:7

行7列:4

以下是皇后在棋盘上的第20种摆放位置

行0列:2

行1列:5

行2列:1

行3列:6

行4列:4

行5列:0

行6列:7

行7列:3

以下是皇后在棋盘上的第21种摆放位置

行0列:2

行1列:5

行2列:3

行3列:0

行4列:7

行5列:4

行6列:6

行7列:1

以下是皇后在棋盘上的第22种摆放位置

行0列:2

行1列:5

行2列:3

行3列:1

行4列:7

行5列:4

行6列:6

行7列:0

以下是皇后在棋盘上的第23种摆放位置

行0列:2

行1列:5

行2列:7

行3列:0

行4列:3

行5列:6

行6列:4

行7列:1

以下是皇后在棋盘上的第24种摆放位置

行0列:2

行1列:5

行2列:7

行3列:0

行4列:4

行5列:6

行6列:1

行7列:3

以下是皇后在棋盘上的第25种摆放位置

行0列:2

行1列:5

行2列:7

行3列:1

行4列:3

行5列:0

行6列:6

行7列:4

以下是皇后在棋盘上的第26种摆放位置

行0列:2

行1列:6

行2列:1

行3列:7

行4列:4

行5列:0

行6列:3

行7列:5

以下是皇后在棋盘上的第27种摆放位置

行0列:2

行1列:6

行2列:1

行3列:7

行4列:5

行5列:3

行6列:0

行7列:4

以下是皇后在棋盘上的第28种摆放位置

行0列:2

行1列:7

行2列:3

行3列:6

行4列:0

行5列:5

行6列:1

行7列:4

以下是皇后在棋盘上的第29种摆放位置

行0列:3

行1列:0

行2列:4

行3列:7

行4列:1

行5列:6

行6列:2

行7列:5

以下是皇后在棋盘上的第30种摆放位置

行0列:3

行1列:0

行2列:4

行3列:7

行4列:5

行5列:2

行6列:6

行7列:1

以下是皇后在棋盘上的第31种摆放位置

行0列:3

行1列:1

行2列:4

行3列:7

行4列:5

行5列:0

行6列:2

行7列:6

以下是皇后在棋盘上的第32种摆放位置

行0列:3

行1列:1

行2列:6

行3列:2

行4列:5

行5列:7

行6列:0

行7列:4

以下是皇后在棋盘上的第33种摆放位置

行0列:3

行1列:1

行2列:6

行3列:2

行4列:5

行5列:7

行6列:4

行7列:0

以下是皇后在棋盘上的第34种摆放位置

行0列:3

行1列:1

行2列:6

行3列:4

行4列:0

行5列:7

行6列:5

行7列:2

以下是皇后在棋盘上的第35种摆放位置

行0列:3

行1列:1

行2列:7

行3列:4

行4列:6

行5列:0

行6列:2

行7列:5

以下是皇后在棋盘上的第36种摆放位置

行0列:3

行1列:1

行2列:7

行3列:5

行4列:0

行5列:2

行6列:4

行7列:6

以下是皇后在棋盘上的第37种摆放位置

行0列:3

行1列:5

行2列:0

行3列:4

行4列:1

行5列:7

行6列:2

行7列:6

以下是皇后在棋盘上的第38种摆放位置

行0列:3

行1列:5

行2列:7

行3列:1

行4列:6

行5列:0

行6列:2

行7列:4

以下是皇后在棋盘上的第39种摆放位置

行0列:3

行1列:5

行2列:7

行3列:2

行4列:0

行5列:6

行6列:4

行7列:1

以下是皇后在棋盘上的第40种摆放位置

行0列:3

行1列:6

行2列:0

行3列:7

行4列:4

行5列:1

行6列:5

行7列:2

以下是皇后在棋盘上的第41种摆放位置

行0列:3

行1列:6

行2列:2

行3列:7

行4列:1

行5列:4

行6列:0

行7列:5

以下是皇后在棋盘上的第42种摆放位置

行0列:3

行1列:6

行2列:4

行3列:1

行4列:5

行5列:0

行6列:2

行7列:7

以下是皇后在棋盘上的第43种摆放位置

行0列:3

行1列:6

行2列:4

行3列:2

行4列:0

行5列:5

行6列:7

行7列:1

以下是皇后在棋盘上的第44种摆放位置

行0列:3

行1列:7

行2列:0

行3列:2

行4列:5

行5列:1

行6列:6

行7列:4

以下是皇后在棋盘上的第45种摆放位置

行0列:3

行1列:7

行2列:0

行3列:4

行4列:6

行5列:1

行6列:5

行7列:2

以下是皇后在棋盘上的第46种摆放位置

行0列:3

行1列:7

行2列:4

行3列:2

行4列:0

行5列:6

行6列:1

行7列:5

以下是皇后在棋盘上的第47种摆放位置

行0列:4

行1列:0

行2列:3

行3列:5

行4列:7

行5列:1

行6列:6

行7列:2

以下是皇后在棋盘上的第48种摆放位置

行0列:4

行1列:0

行2列:7

行3列:3

行4列:1

行5列:6

行6列:2

行7列:5

以下是皇后在棋盘上的第49种摆放位置

行0列:4

行1列:0

行2列:7

行3列:5

行4列:2

行5列:6

行6列:1

行7列:3

以下是皇后在棋盘上的第50种摆放位置

行0列:4

行1列:1

行2列:3

行3列:5

行4列:7

行5列:2

行6列:0

行7列:6

以下是皇后在棋盘上的第51种摆放位置

行0列:4

行1列:1

行2列:3

行3列:6

行4列:2

行5列:7

行6列:5

行7列:0

以下是皇后在棋盘上的第52种摆放位置

行0列:4

行1列:1

行2列:5

行3列:0

行4列:6

行5列:3

行6列:7

行7列:2

以下是皇后在棋盘上的第53种摆放位置

行0列:4

行1列:1

行2列:7

行3列:0

行4列:3

行5列:6

行6列:2

行7列:5

以下是皇后在棋盘上的第54种摆放位置

行0列:4

行1列:2

行2列:0

行3列:5

行4列:7

行5列:1

行6列:3

行7列:6

以下是皇后在棋盘上的第55种摆放位置

行0列:4

行1列:2

行2列:0

行3列:6

行4列:1

行5列:7

行6列:5

行7列:3

以下是皇后在棋盘上的第56种摆放位置

行0列:4

行1列:2

行2列:7

行3列:3

行4列:6

行5列:0

行6列:5

行7列:1

以下是皇后在棋盘上的第57种摆放位置

行0列:4

行1列:6

行2列:0

行3列:2

行4列:7

行5列:5

行6列:3

行7列:1

以下是皇后在棋盘上的第58种摆放位置

行0列:4

行1列:6

行2列:0

行3列:3

行4列:1

行5列:7

行6列:5

行7列:2

以下是皇后在棋盘上的第59种摆放位置

行0列:4

行1列:6

行2列:1

行3列:3

行4列:7

行5列:0

行6列:2

行7列:5

以下是皇后在棋盘上的第60种摆放位置

行0列:4

行1列:6

行2列:1

行3列:5

行4列:2

行5列:0

行6列:3

行7列:7

以下是皇后在棋盘上的第61种摆放位置

行0列:4

行1列:6

行2列:1

行3列:5

行4列:2

行5列:0

行6列:7

行7列:3

以下是皇后在棋盘上的第62种摆放位置

行0列:4

行1列:6

行2列:3

行3列:0

行4列:2

行5列:7

行6列:5

行7列:1

以下是皇后在棋盘上的第63种摆放位置

行0列:4

行1列:7

行2列:3

行3列:0

行4列:2

行5列:5

行6列:1

行7列:6

以下是皇后在棋盘上的第64种摆放位置

行0列:4

行1列:7

行2列:3

行3列:0

行4列:6

行5列:1

行6列:5

行7列:2

以下是皇后在棋盘上的第65种摆放位置

行0列:5

行1列:0

行2列:4

行3列:1

行4列:7

行5列:2

行6列:6

行7列:3

以下是皇后在棋盘上的第66种摆放位置

行0列:5

行1列:1

行2列:6

行3列:0

行4列:2

行5列:4

行6列:7

行7列:3

以下是皇后在棋盘上的第67种摆放位置

行0列:5

行1列:1

行2列:6

行3列:0

行4列:3

行5列:7

行6列:4

行7列:2

以下是皇后在棋盘上的第68种摆放位置

行0列:5

行1列:2

行2列:0

行3列:6

行4列:4

行5列:7

行6列:1

行7列:3

以下是皇后在棋盘上的第69种摆放位置

行0列:5

行1列:2

行2列:0

行3列:7

行4列:3

行5列:1

行6列:6

行7列:4

以下是皇后在棋盘上的第70种摆放位置

行0列:5

行1列:2

行2列:0

行3列:7

行4列:4

行5列:1

行6列:3

行7列:6

以下是皇后在棋盘上的第71种摆放位置

行0列:5

行1列:2

行2列:4

行3列:6

行4列:0

行5列:3

行6列:1

行7列:7

以下是皇后在棋盘上的第72种摆放位置

行0列:5

行1列:2

行2列:4

行3列:7

行4列:0

行5列:3

行6列:1

行7列:6

以下是皇后在棋盘上的第73种摆放位置

行0列:5

行1列:2

行2列:6

行3列:1

行4列:3

行5列:7

行6列:0

行7列:4

以下是皇后在棋盘上的第74种摆放位置

行0列:5

行1列:2

行2列:6

行3列:1

行4列:7

行5列:4

行6列:0

行7列:3

以下是皇后在棋盘上的第75种摆放位置

行0列:5

行1列:2

行2列:6

行3列:3

行4列:0

行5列:7

行6列:1

行7列:4

以下是皇后在棋盘上的第76种摆放位置

行0列:5

行1列:3

行2列:0

行3列:4

行4列:7

行5列:1

行6列:6

行7列:2

以下是皇后在棋盘上的第77种摆放位置

行0列:5

行1列:3

行2列:1

行3列:7

行4列:4

行5列:6

行6列:0

行7列:2

以下是皇后在棋

Process finished with exit code 0

你可能感兴趣的:(java实现八皇后问题)