import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int n,a[],count;
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
n=scan.nextInt();
a=new int[n];//一维数组
Arrays.fill(a, -1);//填满全部数组
dfs(0);//从第0行开始放
System.out.println(count);//用于记录多少种可能
scan.close();
}
static void dfs(int row) {
if(row==n) {//如果这时候row等于n了则已经遍历完一遍了,是一种情况
count++;//记录
return;
}
for(int i=0;i<n;i++) {//这里记录遍历的过程
if(check(row,i)) {//if语句的条件是check是否为true
a[row]=i;//如果对了就让第一行为i,i表示列数,从(0,0)开始
dfs(row+1);//然后进入递归让行数加1
a[row]=-1;//回溯,以便后续继续算
}
}
}
static boolean check(int row,int col) {//判断
for(int i=0;i<row;i++) {//遍历目前有的每一行
if(a[i]==col||i-a[i]==row-col||i+a[i]==row+col)//检查是否有皇后i-a[i]==row-col为主对角线
return false;//数组表示的就是行,而i表示的就是列
}
return true;
}
}
N皇后问题 DFS(蓝桥题解:冷菱花的代码) 侵删 原创注释
于 2024-04-12 21:06:49 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)