递归回溯的简单的应用
package com.lanqiaobei;
import java.util.Scanner;
public class n皇后dfs {
private static int n;
private static int count;
//检查当前位置是否可用
public static boolean check(int[] a,int x,int y){
for(int i=0;i<x;i++){
//判断是否在同一列
if(a[i]==y) return false;
//判断是否在正对角线
if(a[i]+i==x+y) return false;
//判断是否在反最对角线上
if(i-a[i]==x-y) return false;
}
return true;
}
public static void dfs(int[] a,int row){
if(row==n){
count++;
return;
}
for(int i=0;i<n;i++){
if(check(a,row,i)){
a[row]=i;
dfs(a,row+1);
//a[row]=0; 这里可以不用回溯,因为i记录了当前的值
}
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
int[] a=new int[n];//用一维数组存取,下下标代表行,值代表列
dfs(a,0);
System.out.println(count);
}
}