Консультация № 188170
02.11.2015, 17:14
0.00 руб.
0 0 0
Здравствуйте! Прошу помощи в следующем вопросе:
Нужно реализовать алгоритм который выискивает самый короткий путь между городами проходя каждый город 1 раз. При этом поиск должен возвратиться в начальный город

Написал код под имплементацию алгоритма TSP (traveling salesman problem) но проблема в том что ломаю голову как его реализовать до конца т.е
реализовано:
начинает поиск с города под индексом 0
алгоритм выбирает наиблизкий для себя город и следовательно так же в последуйщих пока не вернется в начальный город. Если есть несколько городов с одинаковым наиблизком расстаянием то береться город с наименьшим индексом

Суть в чем, нужно этот алгоритм доработать так что бы расстояния которые он выдает были бы еще короче
код приложу
Извините за корявый русский )
код написан в эклипсе

Приложение:
package greedytsp;

import java.util.ArrayList;

public class GreedyTSP {
/* Greedy search */
public static int[] greedySolution(int[][] adjacencyMatrix){

int n = adjacencyMatrix.length;
int[] result = new int[n+1]; //n+1 linnade järjekord

ArrayList<Integer> unvisited = new ArrayList<Integer>();

for(int i = 1; i < n; i++) {
unvisited.add(i);
}

int currentLocation = 0;
int count = 0;
result[count++] = currentLocation;

while(unvisited.size() > 0) {
int shortestRange = -1;

for (int city : unvisited) {
if (shortestRange == -1) {
shortestRange = city;
} else if (adjacencyMatrix[currentLocation][city] < adjacencyMatrix[currentLocation][shortestRange]) {
shortestRange = city;
}
}

currentLocation = shortestRange;
result[count++] = shortestRange;


unvisited.remove((Integer) shortestRange);
}

return result;
}
}

Обсуждение

Форма ответа