最短路默写

Dij

        bool visit[MAXN];
        priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > que;
        pair<int, int> cnt;
        memset(visit, false, sizeof(visit));
        visit[st] = true;
        que.push(make_pair(0, st));
        while (!que.empty())
        {
                cnt = que.top();
                que.pop();
                int ucost = cnt.first;
                int u = cnt.second;
                for (int i = Head[u]; i; i = nxt[i])
                {
                        int v = to[i];
                        if (visit[v])
                        {
                                continue;
                        }
                        visit[v] = true;
                        if (dis[v] > dis[u] + cost[i])
                        {
                                dis[v] = dis[u] + cost[i];
                                que.push(make_pair(dis[v], v));
                        }
                }
        }

SPFA

        bool visit[MAXN];
        queue<int> que;
        memset(visit, false, sizeof(visit));
        dis[st] = 0, visit[st] = true;
        que.push(st);
        while (!que.empty())
        {
                int u = que.front();
                que.pop();
                visit[u] = false;
                for (int i = Head[u]; i; i = nxt[i])
                {
                        int v = to[i];
                        if (dis[v] > dis[u] + cost[i])
                        {
                                dis[v] = dis[u] + cost[i];
                                if (!visit[v])
                                {
                                        visit[v] = true;
                                        que.push(v);
                                }
                        }
                }
        }

猜你喜欢

转载自www.cnblogs.com/Aragaki/p/9320478.html