java分治算法实现n皇后问题
2016-10-22 10:47
369 查看
package com.company.Puzzal; /** * Created by likailong on 2016/10/22. */ import java.util.Arrays; /* * n皇后问题: * 在一个n * n的国际象棋盘上放置n个皇后 ,使得这n个皇后不在同一行同一列,同一对角线上 求复合的方案数量 * 因为皇后不能同一行和同一列,所以每一行和每一列只能放置一个皇后 * 可以用把 1-n列的皇后所在的行号写出(从小到大) 就类似与将行号排列组合 也就是 1-n排列组合 * 再筛选出不对角线的 */ class Generate{ private int count; private int n; // 当前国际象棋盘为n * n 放置n个皇后 private final int maxn = 110;//最多棋盘可为 maxn * maxn private boolean [] hashTable; private int [] p; public Generate(int n) {//构造方法 this.n = n; hashTable = new boolean[maxn]; p = new int [maxn]; Arrays.fill(hashTable, false); Arrays.fill(p, 0); count = 0; } public void generatep(int index){ if(index == n + 1){ boolean flag = true; for(int i = 1; i <= n ;i++){ for(int j = i + 1; j <= n ;j++){ if(Math.abs(i - j) == Math.abs(p[i] - p[j])){ flag = false; break; } } } if(flag){ count++; } return; } for(int x = 1; x <= n; x++){ if(hashTable[x] == false){ p[index] = x; hashTable[x] = true; generatep(index + 1); hashTable[x] = false; } } } public int getCount(){ return this.count; } } public class Queen { public static void main(String[] args) { // TODO Auto-generated method stub Generate generateP = new Generate(8); generateP.generatep(1); System.out.println(generateP.getCount()); } }
相关文章推荐
- java分治算法实现n皇后问题
- java分治算法实现n皇后问题
- java分治算法实现n皇后问题
- java分治算法实现n皇后问题
- 回溯法求解 “n 皇后 问题”——Java 实现
- n皇后问题java递归实现
- 分治算法——循环赛日程安排问题(Java实现)
- java数组实现N皇后问题
- JAVA实现N皇后问题(回溯法)
- java实现回溯法解n皇后问题
- N皇后问题,java实现
- 回溯法求解N皇后问题(Java实现)
- n皇后问题回溯法---java图形界面实现回溯过程
- N皇后问题java实现
- Java实现-N皇后问题1
- N皇后问题可视化实现(java)
- 分治算法---棋盘覆盖问题java代码实现
- N皇后问题 位运算解法【JAVA实现】
- java实现八皇后的排列问题
- Java Hanoi塔问题简单分治算法实现