노드의 최단 경로를 저장하기 위해이 함수를 어떻게 수정할 수 있는지 궁금합니다. 이것은 사소한 변경 사항이있는 교과서에서 온 것입니다.Dijkstra의 알고리즘을 수정하여 최단 경로의 노드 인쇄
template <class vType, int size>
void weightedGraphType<vType, size>::shortestPath(vType vertex) {
int i, j;
double minWeight;
for (j = 0; j < gSize; j++) {
smallestWeight[j] = weights[vertex][j];
}
bool weightFound[size];
for (j = 0; j < gSize; j++) {
weightFound[j] = false;
}
for (i = 0; i < gSize; i++) {
int v;
cout << vertex << " to " << i << endl;
minWeight = INFINITY;
for (j = 0; j < gSize; j++) {
if (!weightFound[j]) {
if (smallestWeight[j] < minWeight) {
v = j;
minWeight = smallestWeight[v];
}
}
}
weightFound[v] = true;
for (j = 0; j < gSize; j++) {
if (!weightFound[j]) {
if (minWeight + weights[v][j] < smallestWeight[j]) {
smallestWeight[j] = minWeight + weights[v][j];
}
}
}
} //end for
} //end shortestPath
보관할 트랙 및 해당 인쇄 변성 익스트라의 전체 구현 끝에. 그 중 특정 부분에 문제가 있습니까? –
주 루프 내부의 첫 번째 for 루프는 가중치가 가장 낮은 두 번째 노드를 찾습니다. 다음 루프는 두 번째 노드에서 대상 노드까지의 경로를 찾습니다. 가장 작은 가중치가 새로운 값으로 설정 될 때마다 값을 저장하면 그 값이 가장 짧지 않은 경로에 대한 추가 값이 있습니다. 내 질문은 어떻게 다른 경로를 무시하고, 최단 경로에있는 노드 목록을 저장합니까? 이것이 재귀 알고리즘이라면 더 명확해질 것입니다. – s00pcan
큰 힌트가 있습니다. 길 끝에서 시작하여 거꾸로 작업하십시오. –