首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dijkstra队列

Dijkstra队列
EN

Stack Overflow用户
提问于 2012-12-12 04:05:20
回答 3查看 612关注 0票数 2

我为Dijkstra的algoritm使用了以下代码:

代码语言:javascript
复制
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的类:

代码语言:javascript
复制
Queue *q = new Queue(maxNodes)

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

我只需要这个功能:

代码语言:javascript
复制
Queue *q = new Queue(maxNodes);
q->Enqueue(posStart);
    q.Dequeue(next);

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-12 04:06:29

是。请查看标准模板库中的这个集合类和许多其他集合类。

这里有一个链接:http://www.cplusplus.com/reference/queue/queue/

票数 2
EN

Stack Overflow用户

发布于 2012-12-12 04:10:19

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

票数 3
EN

Stack Overflow用户

发布于 2012-12-12 04:11:54

至少有三件事浮现在我的脑海中:

  1. std::deque -a double-ended queue.
  2. std::queue -a queue container adapter.
  3. std::priority_queue - priority queue。

在C++标准库中还可以找到其他容器和算法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13827636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档