2014-11-30 4 views
2

Когда я вычислить пути снова вершины C to MДейкстры Алгоритм: неверный путь

Правильный путь должен быть

C -> B -> N -> M 

Но

A -> B -> N -> M 

Я использовал этот код Dijkstra Algorithm

Это изображение для моего графика:

public static void main

+0

что ваш график ?! – Lrrr

+0

Вы не разместили ни свой фактический код, ни ваш график. Как вы ожидаете, что кто-нибудь поможет вам? –

+0

жаль, что я не могу опубликовать больше ссылок и больше кода, я редактирую сообщение – illnino

ответ

1

Это потому, что вы первый вызов функция вычисление для А затем вызвать его для C. некоторых полей, как это:

public double minDistance = Double.POSITIVE_INFINITY; 
public Vertex previous; 

уже имеет значение, так что вам нужно удалить pathcomputation для A или очистить эти значения, вы можете сделать это с помощью функции, как:

public void clear() { 
    minDistance = Double.POSITIVE_INFINITY; 
    previous = null; 
} 

внутри этого Vertex класса, и называют это так:

for (Vertex v : vertices) { 
    v.clear(); 
} 

перед тем computePaths(v2);

here является онлайн-версию вашего кода, вы можете увидеть, что выход:

Distance to B: 1.0 
Path: [A, B] 
Distance to M: 5.0 
Path: [C, B, N, M] 
+0

большое спасибо – illnino

+0

ваш прием :) – Lrrr

Смежные вопросы