实验1——N皇后问题的求可行解个数(回溯法)
2014-06-11 09:55
260 查看
N皇后问题求可行解,使用键盘输入。只求结果不打印位置。
import java.util.Scanner; public class Queen { /** * @param aaa * */ static int n ; //用来存储皇后的个数 static int sum =0; //用来记录可行解的个数 static int[] a; // 用来存储列数 public static void main(String[] args) { // TODO Auto-generated method stub queenNumber(); //获取键盘输入的皇后数 a = new int[n+1]; //创建一个列数加一的数组,第一个数弃用,方便取得列数从1开始便于比较和增强可读性。 int t; t = queen(1); if(n == 0) //如果n=0,则可行解个数为0,这种情况一定不要忽略 t = 0; System.out.println(t); } public static void queenNumber(){ System.out.println("Please input a numeber of queen : "); Scanner s = new Scanner(System.in); n = s.nextInt(); } public static boolean place(int k){ int i; for(i=1;i<k;i++) if(Math.abs(k-i)==Math.abs(a[k]-a[i]) || a[k] == a[i]) //在对角线或者在同一列。皇后的个数在递增行数也跟着递增。 return false; return true; } public static int queen(int t){ if(t>n && n>0) //当放置的皇后超过n时,可行解个数加1,此时n必须大于0 sum++; else for(int i=1;i<=n;i++) { a[t] = i; //标明第t个皇后放在第i列 if(place(t)) //如果可以放在某一位置,则继续放下一皇后 queen(t+1); } return sum; } }
相关文章推荐
- 算法分析与设计实验三 回溯法 24点问题 n皇后问题
- 回溯法之N皇后问题
- 回溯法求解 “n 皇后 问题”——Java 实现
- 【回溯法】n皇后问题
- 7.4.1八皇后问题(经典回溯法)
- 回溯法经典—n-皇后问题
- 经典算法(1)——8皇后问题求解(回溯法)
- 拉斯维加斯算法和回溯法在n皇后问题上的应用
- N皇后问题的回溯法实现
- 回溯法解决N皇后问题
- 回溯法 解 n皇后问题
- 回溯法解决N皇后问题
- HDU2553 N皇后问题(回溯法)
- 经典算法(1)——8皇后问题求解(回溯法)
- 回溯法解决N皇后问题——递归与非递归求解
- 经典 八皇后问题——回溯法
- 从N-皇后问题看回溯法
- 使用回溯法来解决n皇后问题
- 回溯法算法步骤&n皇后问题的详细程序(C++)
- 第5章 回溯法,n皇后问题