//八皇后问题
//在8*8的棋盘上摆放8个皇后,使其不能互相攻击,即任意的两个皇后不能处在同意行,同一列,或同意斜线上。
public class Queue {
public static int fb = 8; //皇后的个数
public static int count = 0;//总共有多少中方法
public static void main(String[] args) {
int tpostion[][] = new int[fb][fb];//棋盘
process(tpostion,0);
System.out.println(count);
}
public static void process(int mr[][],int curstep){
if(curstep == fb){//第八个皇后已经放进去了
printResult(mr);
count++;
return;
}
//从当前皇后所在列的0-7试起,直到找到合适的位置
//没有合适的位置回退
for(int step = 0;step < fb;step++){
if(place(mr,curstep,step)){
mr[curstep][step] =1;
process(mr,curstep+1);
}
mr[curstep][step] = 0;
}
}
public static void printResult(int mr[][]){
for(int i = 0; i < mr.length; i++){
for(int j = 0; j < mr[i].length;j++){
System.out.print(mr[i][j]+" ");
}
System.out.println();
}
System.out.println("----------------------------");
}
public static boolean place(int mr[][],int curstep,int step){
if(curstep == 0){
return true;
}
//第curstep个皇后在第step列能不能放
//看一下在前curstep行第step列是否有皇后
for(int i = 0; i < curstep;i++){
if(mr[i][step] == 1){
return false;
}
}
//看一下前curstep行在 step列斜对角上是否有皇后
//列-列 == 行-行
for(int a = 0; a < curstep; a++){
for(int b = 0; b < fb;b++){
if(Math.abs(curstep-a) == Math.abs(step-b) && mr[a][b]==1){
return false;
}
}
}
return true;
}
}
八皇后问题
最新推荐文章于 2024-11-13 17:54:23 发布