```java import java.util.Scanner; public class C2553 {//八皇后问题 static int col[] = new int[20];//col[a]表示第a行的皇后的列数 static int n; static int count; static int out[] = new int[11]; public static void main(String args[]) { Scanner scan = new Scanner(System.in); while(scan.hasNext()) { //以下是打表过程 for(int i=1;i<=10;i++){ n = i;//打表注意:要变量初始化 count = 0; dfs(1);//从第一个皇后开始放 直到放到最后一个 count++ out[i] = count; } n = scan.nextInt(); System.out.println(out[n]); count = 0; } } public static void dfs(int a) {//a是第a行 也是第a个皇后 if(a >= n+1) { count++; }else { for(int i=1;i<=n;i++) {//i表示列数 col[a] = i; if(istrue(a)) { dfs(a+1); } } } } public static boolean istrue(int a) { for(int i=1;i<a;i++) {//i之前的几个皇后 if(abs(a-i)==abs(col[i]-col[a]) || col[i]==col[a]) {//判断对角线 和列里有没有重复 return false; } } return true; } private static Object abs(int i) { // TODO Auto-generated method stub if (i>0) return i; return -i; } } 看注释就好啦