下面的程序实现了,使用优先队列的dijkstra算法求解起点为0的单源最短...

发布于 2022-03-03 17:08:46

下面的程序实现了,使用优先队列的dijkstra算法求解起点为0的单源最短路问题。有定义如下:

typedef pair<int, int> pii

priority_queue<pii, vector<pii>, greater<pii> > q

pair在比较时会先比较第一个数,再比较第二个数,因此q是一个小元素优先的优先队列。对于图中节点x,first[x]代表其第一条出边的编号。对于图中编号为e的边,v[e]代表这条边的终点,w[e]代表这条边的权值。

试完善以下代码:

bool done[MAXN]

for (int i = 0 i < n i++) d[i] = (i == 0 ? 0 : INF)

memset(done, false, sizeof(done))

q.push(make_pair(d[0], 0))

while(!q.empty()) {

        pii u = q.top() q.pop()

        int x = u.second

        if (done[x])              

        done[x] = true

        for (int e = first[x] e != -1 e = next[e])

          if (                       ) {

             d[v[e]] =                 
                          

          }

}

关注者
0
被浏览
41
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看