8皇后问题
分析:在88的格子中放置8个皇后。皇后和皇后横,竖,斜都不能相遇
88的格子放置皇后,且不能相遇。相当于一行只放一个皇后,每行皇后放在不同的列(下标)。
假设把第一个皇后放在0下标的位置。
继续在第二行下标(0~7)的位置放置第二个皇后,并判断是否会和前面的皇后相遇,
相遇则放在下标+1的位置,继续判断,相遇下标+1,直至不相遇。
继续在第三行放置第三个皇后,判断是否会和前面的皇后相遇
。。。。。。
继续在第八行放置第八个皇后,判断是否会和前面的皇后相遇。
结束遍历数组打印输出。
把第一个皇后放置在下标为1的位置。
继续放置。。。。。
。。。。直到八个皇后放完
然后放在下标为2的位置,。。。。直到下标为7
//8皇后问题
public class Test9{
public static void main(String[] args){
int[] a= new int[8];
place(a,0);
}
public static void place(int[] a,int row){
if(row==8){//判断第七排皇后是否放置结束
for(int i=0;i<8;i++){//遍历数组打印输出
System.out.print(a[i]+"\t");
}
System.out.println();//换行
return;//结束程序
}
//放置皇后(注意for循环内是赋值)
outer:for(a[row]=0;a[row]<8;a[row]++){
//判断该皇后的位置是否会和前面的皇后相遇
for(int i=0;i<row;i++){
//a[row]-a[i]==row-i || a[row]-a[i]==i-row
//该代码适用于判断两个皇后斜线相遇的规律
if(a[row]==a[i] || a[row]-a[i]==row-i || a[row]-a[i]==i-row){
//continue代表退出本次循环,继续下一次循环。
//执行改代码。说明两个皇后相遇,所在下标作废,继续下一次循环
continue outer;
}
}
//第一排坐标赋值结束,使用递归继续下一排坐标赋值
place(a,row+1);
}
}
}