Java 在列表中保存向量的方法
我对TSP算法有一个问题 . 我将插入代码并解释: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
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
。@MichaelButschernextPermutation
负责对indexOfCities
arrayIt的城市路线进行排列,修改数组indexOfCities
(意思是“就地”)但您需要在术语列表
中保存未修改的副本。