【发布时间】:2013-11-19 01:03:16
【问题描述】:
我有一个方法可以执行ArrayList 元素的排列,我给出一个 ArrayList 作为存储排列的参数。但是,它总是添加相同的项目。
我认为这个问题是 ArrayList reference。
public class TSP {
static ArrayList permute(ArrayList<Integer> arr, int k, ArrayList<ArrayList<Integer>> resultados) {
for(int i = k; i < arr.size(); i++){
java.util.Collections.swap(arr, i, k);
permute(arr, k+1, resultados);
java.util.Collections.swap(arr, k, i);
}
if (k == arr.size() -1){
System.out.println("Permute method: "+arr.toString());
resultados.add(arr);
}
return resultados;
}
public static void main (String[] args) {
ArrayList<Integer> ciudades = new ArrayList<>();
ciudades.add(1);
ciudades.add(2);
ciudades.add(3);
ArrayList<ArrayList<Integer>> resultados = new ArrayList();
resultados = permute(ciudades, 0, resultados);
for (ArrayList<Integer> resultado : resultados) {
System.out.println(resultado.toString());
}
}
}
执行的输出是:
置换方法:[1, 2, 3]
置换方法:[1, 3, 2]
置换方法:[2, 1, 3]
置换方法:[2, 3, 1]
置换方法:[3,2,1]
置换方法:[3,1,2]
[1、2、3]
[1、2、3]
[1、2、3]
[1、2、3]
[1、2、3]
[1, 2, 3]
所以在算法内部一切正常,但只添加了第一个排列。 为什么?
【问题讨论】:
标签: java recursion arraylist pass-by-reference