浏览 4389 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-25
2. 问题分析: (1) 解空间: n的全排列是一组n元一维向量(x1, x2, x3, ... , xn),搜索空间是:1<=xi<=n i=1,2,3,...,n (2) 约束条件: xi互不相同。技巧:采用"数组记录状态信息", 设置n个元素的一维数组d,其中的n个元素用来记录数据 1~n的使用情况,已使用置1,未使用置0 3. Java代码: package boke; /** * 回溯法 * * @since jdk1.6 * @author 毛正吉 * @version 1.0 * @date 2010.05.25 * */ public class NAllArrangement { private int count = 0; // 解数量 private int n; // 输入数据n private int[] a; // 解向量 private int[] d; // 解状态 /** * @param args */ public static void main(String[] args) { //测试例子 NAllArrangement na = new NAllArrangement(5, 100); na.tryArrangement(1); } public NAllArrangement(int _n, int maxNSize) { n = _n; a = new int[maxNSize]; d = new int[maxNSize]; } /** * 处理方法 * * @param k */ public void tryArrangement(int k) { for (int j = 1; j <= n; j++) { // 搜索解空间 if (d[j] == 0) { a[k] = j; d[j] = 1; } else { // 表明j已用过 continue; } if (k < n) { // 没搜索到底 tryArrangement(k + 1); } else { count++; output(); // 输出解向量 } d[a[k]] = 0; // 回溯 } } /** * 输出解向量 */ private void output() { System.out.println("count = " + count); for (int j = 1; j <= n; j++) { System.out.print(a[j] + " "); } System.out.println(""); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |