簡體   English   中英

Dijkstra的-隊列

[英]Dijkstra's - Queue

我將以下代碼用於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);

謝謝!

priority_queue非常適合Dijkstra的算法,並降低了算法的運行時復雜度(與普通隊列相比)

是。 請檢查此和許多其他收集類的標准模板庫。

這是鏈接: http : //www.cplusplus.com/reference/queue/queue/

至少要想到三件事:

  1. std :: deque —雙端隊列。
  2. std :: queue-隊列容器適配器。
  3. std :: priority_queue —優先級隊列。

在C ++標准庫中還可以找到其他容器和算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM