java算法模板之n皇后
最近准备蓝桥杯,记录一下常见的算法模板,不是专业的ACMer,不足之处多多见谅
import java.util.Scanner;
public class nQueue {
public static int n;
public static int M = 105; //最多104个皇后(从1开始),但是其实到了20个耗时就很长了
public static int[] x = new int[M];
public static int count = 0;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
n = input.nextInt();
backTrace(1);
System.out.println(count);
input.close();
}
public static boolean Place(int t) //判断第t个皇后与前面t-1个已经放置的皇后是否
{
boolean ok = true;
for(int j=1;j<t;j++)
{
if(x[t]==x[j]||t-j==Math.abs(x[t]-x[j])) //检查列和斜线
{
ok = false;
break;
}
}
return ok;
}
public static void backTrace(int t)
{
if(t>n)
{
count++;
for(int i=1;i<=n;i++)
{
System.out.print(x[i] + " ");
}
System.out.println();
}
else
{
for(int i=1;i<=n;i++)
{
x[t] = i;
if(Place(t)) //可以放置则进入下一层皇后
{
backTrace(t+1);
}
}
}
}
}