public class QUeenN { // static int N =4; // static int p[]=new int[N+1]; // static int j=1; // static int answer=0; public static void main(String[] args) { int N =8; int p[]=new int[N+1]; int j=1;//TODO 从第一个皇后开始摆放 int answer=0;//TODO 存储解的个数 for (int i=1;i<N+1;i++){//ToDO 初始化 p[i]=0; } while(j>=1){ p[j]=p[j]+1;//TODO 初始化第一个值 while (p[j]<=N && !check(j,p)){//TODO 直到皇后满足摆放的位置 p[j]=p[j]+1; } if (p[j]<=N){//TODO 说明摆放合法 if (j==N){//TODO 说明皇后找完了,可以输出一组解了 answer++; System.out.println("第"+ answer+"组方案的解为"); for (int i=1;i<=N;i++){ System.out.print(p[i]+" "); } System.out.println(); } else {//TODO 继续摆放 j=j+1; } } else {//TODO 说明超出可以摆放的位置大小,回退上一格 p[j]=0; j=j-1;//TODO 这里是让j指向上一个皇后重新摆 } } } public static boolean check(int j,int [] p){//TODO 查看第j行的元素满不满足条件,不满足的就向后进一格 for (int i=1;i<j;i++){ if ( p[i]==p[j] || Math.abs(p[j]-p[i])==Math.abs(i-j)){//TODO 排除同一列或者同一斜线的皇后情况 return false; } } //TODO 能正常结束循环说明该皇后位置满足情况 return true; } }
附实现截图: