'пытается найти кратчайший путь между первым и последним узлом. Проблема заключается в том, что мой код всегда возвращает 0. У меня такое чувство, потому что оно вычисляет расстояние между первым узлом и первым узлом, которое стремится к нулю, но я не 100%. Почему мой код всегда возвращает 0?Алгоритм Дейкстры с использованием матрицы смежности Проблема
Матрица adj [10] [10] и все узлы соединены, а g.network [] [] - матрица.
private static int dijkstras(Graph g) {
// Dijkstra's Algorithm
int[] best = new int[g.network.length];
boolean[] visited = new boolean[g.network.length];
int max = 10000; // Infinity equivalent.
for (int i = 0; i < g.network.length; i++)
{
best[i] = max;
visited[i] = false;
}
best[0] = 0;
for(int i = 0; i < g.network.length; i++)
{
int min = max;
int currentNode = 0;
for (int j = 0; j < g.network.length; j++)
{
if (!visited[j] && best[j] < min)
{
currentNode = j;
min = best[j];
}
}
visited[currentNode] = true;
for (int j = 0; j < g.network.length; j++)
{
if (g.network[currentNode][j] < max && best[currentNode] + g.network[currentNode][j] < best[j])
{
best[j] = best[currentNode] + g.network[currentNode][j];
}
}
}
return best[g.network.length - 2];
}
Кажется, что вам не хватает кода. Возможно, 'return 0;', который заканчивает метод? Конечно, я просто шучу, но я ничего не вижу в заявлении о возврате: -/ – Jeremy
Помимо отсутствия оператора return, чтобы он фактически не компилировался, ваш код не использует параметр 'start', поэтому он не может отличить начало от любого другого узла. Это означает, что вы в какой-то момент сравниваете начало запуска, и если вы вернете что-либо, вероятно, это минимальное расстояние 0. –
Принадлежности, когда я скопировал и вставил свой код, я пропустил оператор возврата. Я использовал старт, когда я вызвал метод в предыдущей попытке, но еще не удалил его. Я сделаю это сейчас, поскольку это излишне. FYI, начало было установлено на 0 в предыдущих попытках. – JasonMortonNZ