java实现N皇后递归算法
2014-12-02 22:32
204 查看
这里是N皇后实现递归算法的java实现:
package NQueensDG; import java.util.Scanner; public class NQUEENSDIGUI { /** * @author YuYunTan(谭淇蔚) * *N 皇后问题: *在一个 N * N 的国际象棋棋盘中, *怎样放置 N 个皇后才能使 N 个皇后之间不会互相有威胁而共同存在于棋局中, *即在 N * N 个格子的棋盘中没有任何两个皇后是在同一行、同一列、同一斜线上。 * *下面是递归的回溯法 *递归方法backtrack(1)实现对整个解空间的回溯搜索 *backtrack(i)搜索解空间中第i层子树。 *类NQUEENSDIGUI的数据成员记录解空间中的结点信息,以减少窗格backtrack的参数。sum记录可行解的 方案数 * */ //------------------------------------------------------------ //下面是数据成员-------------------------------------------------- static int n;//皇后个数 static int []x;//当前解 static long sum; //成员定义结束---------------------------------------------------- NQUEENSDIGUI(int nn){ n =nn; sum =0; x = new int [n+1]; for(int i=0;i <= n ;i++)x[i]=0;//初始化都为0 backtrack(1); } private void backtrack(int t) { // TODO 自动生成的方法存根 if(t > n){ sum++; print(x); } else for(int i=1;i<=n;i++){ x[t]=i; if(place(t))backtrack(t+1);//递归调用,循环求解 } } private void print(int[] x2) { // TODO 自动生成的方法存根 System.out.println((x2.length-1)+"皇后的解为:"); for(int i=1;i<=n;i++){ System.out.print(" "+x2[i]); } System.out.println(""); } private boolean place(int k) { // TODO 自动生成的方法存根 for(int j=1;j < k;j++){ if((Math.abs(k-j) == Math.abs(x[j]-x[k]))||(x[j] == x[k]))return false; } return true; } public static void main(String[] args) { int s; Scanner input = new Scanner(System.in); s = input.nextInt(); NQUEENSDIGUI a = new NQUEENSDIGUI(s); System.out.println("---------------------------------"); System.out.println("华丽丽的"+s+"皇后问题解"); System.out.println(s+"皇后一共有"+sum+"个解!"); input.close(); } }
相关文章推荐
- java实现的经典递归算法三例
- n皇后问题(人工智能试验java实现)
- java递归算法实现
- 实现全排列的两种算法:字典序列法以及递归算法(java)
- java使用递归算法实现加载本地磁盘的文件目录和文件
- 用java实现的经典递归算法
- 八皇后问题,Java实现,可推广解决N皇后问题
- java实现回溯法解n皇后问题
- java实现N皇后问题
- 八皇后 java实现
- 回溯法求解 “n 皇后 问题”——Java 实现
- n皇后问题java递归实现
- 回溯法求解N皇后问题(Java实现)
- java实现的经典递归算法三例
- java递归算法实现
- 用java实现的经典递归算法
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法。
- java实现的经典递归算法三例
- 快速排序非递归算法的java实现
- java数组实现N皇后问题