4皇后问题 package com.dzu.nqueen; /** * 4皇后问题的求解 */ public class NQueen { int n;//皇后的个数 int[] x=new int[5];//存储结果的数组 int sum=0;//解的数量 /** * 判断是否在k行可以放入 * @param k * @return */ boolean place(int k){ for (int i = 1; i <k; i++) { //设置隐性的约束条件 if(Math.abs(k-i)==Math.abs(x[i]-x[k])||x[i]==x[k]){ return false; } } return true; } int Dfs(int t){//拓展的是行 if(t>n){ sum++; //输出解的结果 for (int i = 1; i <=n ; i++) { System.out.print(x[i]+" "); } System.out.println(); }else { //dfs搜索第t行是否有满足条件的元素 for (int i = 1; i <=n; i++) { x[t]=i; if(place(t)){ Dfs(t+1); } } } return sum;//返回结果集 } //进行测试 public static void main(String[] args) { NQueen nQueen=new NQueen(); nQueen.n=4;//该问题是四皇后问题 int result = nQueen.Dfs(1);//从第一层进行深度优先搜索并输出返回的结果 System.out.println("4皇后问题的结果为"+result+"种"); } }