다음 코드는 유향 그래프에서 완벽하게 작동하며 무향 그래프가 주어지면 최단 경로를 반환하지 않습니다.Dijkstra 무 방향 그래프의 최단 경로
public void Djikstra(int s){
boolean[] marked = new boolean[V];
dist = new double[V];
for(int i = 0; i<V; i++){ # initializing array
dist[i] = Double.POSITIVE_INFINITY;
}
dist[s] = 0.0;
Queue<Integer> pqs = new PriorityQueue<Integer>();
pqs.add(s);
while(!pqs.isEmpty()){
int v = pqs.poll();
if(marked[v]) continue;
marked[v] = true;
for(Edge e : get_list(v)){ # get_list(v) will return an iterable from the adjacency list at index v
v = e.getV()
int w = e.getW();
if(dist[w] > dist[v] + e.getWeight()){
dist[w] = dist[v] + e.getWeight();
distances[w] = e #all the distances will be stored in this array
pqs.add(w);
}
}
}
}
여기 내 실수는 무엇입니까? 나는 그것이 단순한 오류라고 확신합니다. 몇 가지 힌트가 그 일을 할 것입니다.
감사합니다.
편집 :
public void addEdge(Edge e){
adj[e.getV()].add(e);
adj[e.getW()].add(e);
}
, 당신은 연부 고려해야합니다 -> B와 B -> A, 둘 다 포함하고 alogorithm을 다시 실행했는지 확인하십시오. 지시어로 작동하는 경우 나머지 가장자리를 추가해야합니다. – higuaro
addEdge 메서드를 제 질문에 추가 했으므로 확인하십시오. 두 경우 모두 이미 가장자리를 추가하고 있습니다. – moenad