Способ сохранения векторов в списке - PullRequest
0 голосов
/ 05 ноября 2018

У меня проблема с алгоритмом TSP , Я собираюсь вставить код и объяснить:

List listOfPermutations = new ArrayList();
while (cont.compareTo(deleteRutes) < 0) { 
    listOfPermutations.add(indexOfCities);
    nextPermutation(indexOfCities);
    ....

У меня проблема в следующем, Моя идея заключалась в том, чтобы вставить все возможные перестановки (массивы) в список, но проблема в том, что список всегда принимает одни и те же значения массива, это логично, поскольку массив indexOfCities только один. Я возвращаю это некоторое время, и я не знаю, как решить это. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 05 ноября 2018

indexOfCities содержит ссылку на массив. Эта же ссылка добавляется как элемент к listOfPermutations с

listOfPermutations.add(indexOfCities);

в каждой итерации цикла.

Затем массив модифицируется с помощью

nextPermutation(indexOfCities);

в каждой итерации цикла. Таким образом, все сохраненные ссылки указывают на один и тот же измененный массив.

Чтобы решить эту проблему, добавьте копию массива в indexOfCities в listOfPermutations. Например. вот так:

int[] indexOfCitiesAux = indexOfCities.clone();
listOfPermutations.add(indexOfCitiesAux);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...