02.26 DFS-八皇后 Checker Challenge

设4个数组:a[i]表示第i行的纵坐标为多少b[i]表示第i列有没有被占用,1占用,0,没占用c[i]记录左下到右上的对角线:我们可以发现,如果两个点都在左下到右上的线上,那么他们的横、纵坐标相加的值相等;d[i]记录右下到左上的对角线:我们可以发现,如果两个点都在右下到左上的线上,那么他们的横、纵坐标相减的值相等,但有可能是负数,所以我们偏移n

这样设4个数组,我们每次判断即可,不用再循环一次了。

<code>import java.util.Scanner;public class 八黄后 { static int sum,n; static int a[]=new int[30]; static int b[]=new int[30]; static int c[]=new int[30]; static int d[]=new int[30]; static void dfs(int h){ if (h==n+1){ sum++; if(sum<=3){ for (int i = 1; i /<code>