本例子是使用DFS深度搜索来实现求n皇后问题
import java.util.Scanner;
/**
* 8皇后:8个皇后都不处于同一行、列、对角线上
*
*/
//dfs算法保证了每个皇后不可能会处于同一行、列上,所以只要判断所有皇后不处于同一对角线就好
public class Dfs求n皇后问题 {
public int n;
public int a[];
public int book[];
public int count=0;
//dfs算法保证了每个皇后不可能会处于同一行、列上,所以只要判断所有皇后不处于同一对角线就好
public boolean pan() {
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
{
//dfs算法保证了每个皇后不可能会处于同一行、列上,所以只要判断所有皇后不处于同一对角线就好
//对角线判断公式
if(Math.abs(a[j]-a[i])==j-i)
return false;
}
}
return true;
}
public void dfs(int step) {
if(step==n+1) {
if(pan()) {
count++;
prinf();
}
}
for(int i=1;i<=n;i++) {
if(book[i]==0) {
book[i]=1; //i号牌从手中移除
a[step]=i; //将i号牌加入step号箱子中
dfs(step+1);
book[i]=0;
}
}
}
//打印所有的8皇后地图
public void prinf() {
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
//Q代表女皇所在的位置,*代表棋盘
if(a[i]==j)
System.out.print("Q ");
else
System.out.print("* ");
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
Dfs求n皇后问题 d1=new Dfs求n皇后问题();
d1.n=scanner.nextInt();
d1.a=new int[d1.n+1];
d1.book=new int[d1.n+1];
d1.dfs(1);
System.out.println(d1.n+"皇后问题有:"+d1.count+"种可能性");
}
}