안녕하세요, 저는 C Dijkstra의 알고리즘을 구현하여 최단 경로를 찾았 습니다만, 최단 경로를 반환해야합니다. 누구나 어떻게 할 수 있습니까?가장 짧은 최단 경로 (dijkstra 알고리즘)를 반환하는 방법
내 익스트라 기능 :
int * Dijkstra(graph **g, int totalVertex, int vStart) {
int i;
int *distance = (int*) malloc(totalVertex * sizeof (int));
int *last = (int*) malloc(totalVertex * sizeof (int));
int *visited = (int*) calloc(totalVertex, sizeof (int));
int maxDistance, m;
graph *vertex;
for (i = 0; i < totalVertex; i++) {
distance[i] = MAXINT;
last[i] = -1;
}
distance[vOrigem] = 0;
while (sum(visited, totalVertex) < totalVertex) {
maxDistance = MAXINT;
for (i = 0; i < totalVertex; i++) {
if ((distance[i] < maxDistance) && (visited[i] == 0)) {
maxDistance = distance[i];
m = i;
}
}
vertex = g[m];
while (vertex != NULL) {
if ((vertex->distance + distance[m]) < (distance[vertex-> destination])) {
distance[vertex->destination] = vertex->distance + distance[m];
last[vertex->destination] = m;
}
vertex = vertice->next;
}
visited[m] = 1;
}
free(distance);
free(visited);
return last;
}
나는이 기능을 예를 들어 2 번 호출 할 필요가
하고 반환, 그래프의 두 최단 경로.
감사합니다.
숙제 문제가 있습니까? – gcbenison
아니요, 저는 Dijkstra에 박차를 가하고 있습니다. 해결책을 묻지 않고 몇 가지 아이디어를 어떻게 얻을 수 있습니까? –
Dijstra를 반복 실행하여 매번 솔루션의 정점을 제거하십시오. – tbert