JAVA怎么用回溯法打印出1,2,3,4的所有组合和排列
2个回答
展开全部
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(4, 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("");
}
}
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(4, 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("");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询