Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在列表中保存向量的方法_Java_Arrays_List_Permutation - Fatal编程技术网

Java 在列表中保存向量的方法

Java 在列表中保存向量的方法,java,arrays,list,permutation,Java,Arrays,List,Permutation,我对TSP算法有一个问题 . 我将插入代码并解释: List listOfPermutations = new ArrayList(); while (cont.compareTo(deleteRutes) < 0) { listOfPermutations.add(indexOfCities); nextPermutation(indexOfCities); .... listOfPermutations=newArrayList(); 而(cont.comp

我对TSP算法有一个问题 . 我将插入代码并解释:

List listOfPermutations = new ArrayList();
while (cont.compareTo(deleteRutes) < 0) { 
    listOfPermutations.add(indexOfCities);
    nextPermutation(indexOfCities);
    ....
listOfPermutations=newArrayList();
而(cont.compareTo(deleteRutes)<0){
术语列表。添加(索引性);
下一个术语(指数);
....
我的问题是:,
我的想法是在列表中插入所有可能的排列(数组),但问题是列表总是采用相同的值​​对于数组,它是合乎逻辑的,因为indexOfCities数组只有一个。我已经还给它一段时间了,我不知道如何解决它。有人能帮我吗?

indexOfCities
包含对数组的引用。此引用作为项添加到
术语列表中

listOfPermutations.add(indexOfCities);
在每个循环迭代中

然后使用

nextPermutation(indexOfCities);
所以存储的引用都指向同一个修改过的数组

要解决此问题,请将
indexOfCities
中的数组副本添加到
listOfPermutations
中。例如:

int[] indexOfCitiesAux = indexOfCities.clone();
listOfPermutations.add(indexOfCitiesAux);

您需要创建
索引项的副本
并将其添加到
术语列表
@MichaelButscher,但我如何知道必须创建多少副本?每次您要添加到
术语列表
时,您都需要一份副本,因为(我猜)
nextPermutation
然后将修改
list of permutations
。@MichaelButscher
nextPermutation
负责对
indexOfCities
arrayIt的城市路线进行排列,修改数组
indexOfCities
(意思是“就地”)但您需要在
术语列表
中保存未修改的副本。