c++ - 修改 Dijkstra 算法以打印最短路径中的节点

标签 c++ graph

我想知道如何修改这个函数来保存节点的最终最短路径。这是我的课本,稍作修改。

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

最佳答案

这里有一个提示:对于每个节点,您知道您找到的达到它的最小权重。您还可以在到达此节点之前知道“到达此节点的最短路径”来自何处。

关于c++ - 修改 Dijkstra 算法以打印最短路径中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330463/

相关文章:

c++ - 使用 boost chrono 格式化时间

c++ - 禁用照明的 OpenGL 绘图丢失其 "depth"

python - networkx 说我的节点比实际的少

java - 使用数据组创建条形图

c++ - C++11 中的默认初始化?

不同平台上比较方法中的 C++ 常量引用

c++ - 是否可以为同时使用 Windows 和 Linux 的客户端使用相同的 DLL

c# - 图节点坐标评估

algorithm - 检查图是否是二分的并添加每条新边

java - SmallWorldExample 的实现