Java 我如何修改这个递归回溯算法(倒计时:游戏)来找到所有的解决方案而不是一个?
我写了一个方法,使用递归和回溯来找到倒计时问题的一个解决方案。我现在想做的是修改这个方法,以便它能够找到所有可能的解决方案。 该程序包括使用基本算术运算(+、-、×、÷)从6个数字的初始集合中获取目标数字(101到999之间的自然整数)。 我能够找到第一个解决方案,但我希望找到所有解决方案,然后选择最好的解决方案(操作较少的解决方案)。 这是我现在掌握的密码Java 我如何修改这个递归回溯算法(倒计时:游戏)来找到所有的解决方案而不是一个?,java,recursion,backtracking,Java,Recursion,Backtracking,我写了一个方法,使用递归和回溯来找到倒计时问题的一个解决方案。我现在想做的是修改这个方法,以便它能够找到所有可能的解决方案。 该程序包括使用基本算术运算(+、-、×、÷)从6个数字的初始集合中获取目标数字(101到999之间的自然整数)。 我能够找到第一个解决方案,但我希望找到所有解决方案,然后选择最好的解决方案(操作较少的解决方案)。 这是我现在掌握的密码 private static boolean backtracking(ArrayList<Integer> aux, int
private static boolean backtracking(ArrayList<Integer> aux, int len, int total, ArrayList<String> operations) {
for(int i = 0; i < len; i++) {
if(aux.get(i) == total) {
return true;
}
for(int j = i + 1; j < len; j++) {
for(int k = 0; k < operations.size(); k++) {
int res = doOperation(operations.get(k), aux.get(i), aux.get(j));
if(res != 0) {
int savei = aux.get(i);
int savej = aux.get(j);
aux.set(i, res);
aux.set(j, aux.get(len-1));
if(backtracking(aux, len-1, total, operations)) {
solution.add(Math.max(savei, savej) + " " + operations.get(k) + " " + Math.min(savei, savej) + " = " + res);
return true;
}
aux.set(i, savei);
aux.set(j, savej);
}
}
}
}
return false;
}
private static int doOperation(String operation, int x, int y) {
int r = 0;
if(operation.equals("+")) {
r = x + y;
if(r <= x || r <= y) {
return 0;
}else {
return r;
}
}else if(operation.equals("-")) {
if(x < y) {
return y - x;
}else {
return x - y;
}
}else if(operation.equals("*")) {
r = x * y;
if(r <= x || r <= y) {
return 0;
}else {
return r;
}
}else if(operation.equals("/")) {
if(x < y) {
int t = x;
x = y;
y = t;
}
if(x % y == 0) {
return x / y;
}else {
return 0;
}
}else {
return r;
}
}
private静态布尔回溯(ArrayList aux、int len、int total、ArrayList操作){
对于(int i=0;i