回朔法:
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); } } } }