function shortestPathUsingTopSort(n, graph, source, destination) {
const topSortArray = topSort(graph);
const distance = new Array(n).fill(Infinity);
const parents = [];
distance[source] = 0;
parents[source] = -1;
for (let i = 0; i < topSortArray.length; i++) {
const nodeIndex = topSortArray[i];
if (!graph[nodeIndex]) {
continue;
}
for (const node of graph[nodeIndex]) {
const currentDistance = distance[nodeIndex] + node.weight;
if (currentDistance < distance[node.vertex]) {
parents[node.vertex] = nodeIndex;
distance[node.vertex] = currentDistance;
}
}
}
return {
distance: distance[destination],
path: generatePath(destination, parents)
};
}