こんにちは私はCダイクストラのアルゴリズムで最短経路を見つけましたが、最短経路を返す必要があります。n最短経路を返す方法(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つの最短経路、私は2回に例えば、この関数を呼び出す必要があり、それが返されます。
ありがとうございます。
これは宿題の問題ですか? – gcbenison
いいえ、私はDijkstraを詰め込んでいます、私は解決策を求めていません、ちょっとしたアイデアをどうすればいいですか? –
Dijstraを繰り返し実行し、毎回ソリューションの頂点を削除します。 – tbert