c++ - Dijkstra 的 - 队列

标签 c++ queue dijkstra

我对 Dijkstra 算法使用以下代码:

int Graph::ShortestPath(Vertex *start, Vertex *end)
{
    int posStart = IndexOfNode(start);
    int posEnd = IndexOfNode(end);
    int result;

    bool visit[cntNodes];
    int distance[cntNodes];
    // Initialization: set every distance to -1 until we discover a path
    for (int i = 0; i < cntNodes; i++) {
        visit[i] = false;
        distance[i] = -1;
    } // for

    // The distance from the source to the source is defined to be zero
    distance[posStart] = 0;

    Queue *q = new Queue(maxNodes);
    q->Enqueue(posStart);
    while (!q->Empty()) {
        int next, alternative;
        q.Dequeue(next);
        for (int i = 0; i < cntNodes; i++) {
            if (adjmatrix[next][i]) {
                alternative = distance[next] + adjmatrix[next][i];
                if (visit[i]) {
                    if (alternative < distance[i]) {
                        distance[i] = alternative;
                        q.Enqueue(i);
                    } // if
                }// if
                else {
                    distance[i] = alternative;
                    visit[i] = true;
                    q.Enqueue(i);
                } // else
            } // if
        } // for
    }
    delete q;
    result = distance[posEnd];
    delete[] visit;
    delete[] distance;
    return result;
}

现在我使用一个名为 Queue 的自己创建的类:

Queue *q = new Queue(maxNodes)

有没有我可以使用的 C++ 标准队列来代替我自己的实现。

我只需要这个功能:

Queue *q = new Queue(maxNodes);
q->Enqueue(posStart);
    q.Dequeue(next);

谢谢!

最佳答案

A priority_queue非常适合 Dijkstra 算法,并降低了算法的运行时复杂度(与普通队列相比)

关于c++ - Dijkstra 的 - 队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13827636/

相关文章:

c++ - 获取将在 Catch 中运行的部分

c# - 队列和并发队列的 TryDequeue 方法之间的区别

c++ - dijkstra 算法的优先级队列

algorithm - 带优先队列的 Dijkstra 算法

Python:判断跨n个数组的路径中的每一步是否都低于阈值

c++ - 在 A 类中引用 A 类的其他实例

c++ - Windows 7 中的背景色工具栏和菜单栏

c++ - 用于恢复先前值的 RAII 对象

queue - NServiceBus 单进程,但多个输入队列

Java 队列定时器