JAVA怎么用回溯法打印出1,2,3,4的所有组合和排列

 我来答
fylsh
2012-06-13 · TA获得超过950个赞
知道小有建树答主
回答量:1472
采纳率:0%
帮助的人:1042万
展开全部
/*
*组合 回溯
*a为源数据,调用时用f(a,0,"")
*/
void f(int[] a,int n,String v){
if(n==a.length){
System.out.println(v);
}else{
f(a,n+1,v);
f(a,n+1,v+","+a[n]);
}
}
kejiaweiren
2012-06-13 · TA获得超过6740个赞
知道大有可为答主
回答量:1774
采纳率:0%
帮助的人:3336万
展开全部
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("");
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式