回朔法:
import java.util.Scanner;
public class Main{
public static final int N=100;
public static int []queen=new int[N];
public static int n;
public static int sum=0;
public static void main(String args[]) {
Main test=new Main();
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
place(0);
System.out.println("总共有:"+sum);
}
static boolean attack(int row,int col) {
//检查皇后是否冲突
for(int i=0;i<row;++i) {
if((queen[i]==col)||Math.abs(queen[i]-col)==Math.abs(i-row))return false;
//在同一列 斜线上
}
return true;
}
static void place(int cur) {
//cur代表当前行 queen【】存储棋子放在那一列上
for(int i=0;i<n;++i) {//显示行的约束
if(attack(cur,i)) {
queen[cur]=i;
if(cur==n-1) {
// 打印结果
/* for(int j=0;j<n;++j)
System.out.print(queen[j]+" ");*/
char temp[][]=new char[n][n];
for(int m=0;m<n;++m) {
temp[m][queen[m]]='#';
}
for(int m=0;m<n;++m) {
for(int g=0;g<n;++g) {
if(temp[m][g]!='#')
temp[m][g]='&';
System.out.print(temp[m][g]);
}
System.out.println();
}
System.out.println();
sum++;
}
else//回溯下一种情况
place(cur+1);
}
}
}
}