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