思路(过几天)
package 块;
import java.util.Scanner;
public class 八皇后 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i,j,k;
Scanner input =new Scanner(System.in);
while(input.hasNext())
{
int n=input.nextInt();
if(n>0) {
int []Queen=new int [n];
int []QueenOfNumber =new int[1];
int []sum =new int [1];
i=0; j=0; QueenOfNumber[0]=0; sum[0]=0;
RuKou(i,j,Queen,QueenOfNumber,sum);
}
}
}
public static boolean PD(int i,int j,int[]Queen,int []sum) { // 判断
if(j>=Queen.length)
return false;
for(int k=0;k<i;k++)
if(j==Queen[k] || Math.abs(j-Queen[k])==Math.abs(i-k))
return false;
return true;
}
public static int BackTrak(int i,int j,int []Queen,int []QueenOfNumber) { // 回溯
--QueenOfNumber[0];
j=Queen[i]+1;
Queen[i]=0;
return j;
}
public static void RuKou(int i,int j,int []Queen,int []QueenOfNumber,int []sum) { //
while(QueenOfNumber[0]<Queen.length ) { // 注意QueenOfNumber的初始化的值
if(i<0) break;
if(PD(i,j,Queen,sum)) {
++QueenOfNumber[0];
Queen[i]=j;
++i;
j=0;
}
else if(j>=Queen.length-1) {
--i;
if(i<0) {
//
System.out.println(sum[0]);
break;
}
j=BackTrak(i,j,Queen,QueenOfNumber);
}
else {
++j;
}
if(QueenOfNumber[0]==Queen.length) {
++sum[0];
if(sum[0]<=3) {
for(int e:Queen)
System.out.printf("%d ",e+1);
System.out.print("\n");
}
--i;
j=Queen[i];
j= BackTrak(i,j,Queen,QueenOfNumber);
}
}
}
}