文章

85

粉丝

0

获赞

406

访问

8.2k

头像
最短路 题解:SPFA+vector邻接表
P1565 中国科学院大学2021年机试题
发布于2026年3月7日 20:12
阅读数 38

#include <bits/stdc++.h>
using namespace std;
/*
 spfa+vector
 */
#define INF 0x3f3f3f3f
const int Max = 105;
int n,m;
struct Edge {
    int u, v,w;
};

vector<Edge> edges;
vector<int> G[Max];
int dist[Max];
int  vis[Max];

void SPFA(int s) {
    for (int i = 1; i <= n; i++) dist[i] = INF;
    dist[s] = 0;
    memset(vis, 0, sizeof (vis));
    queue<int> q;
    q.push(s);
    while (!q.empty()) {
        int u = q.front();q.pop();
        vis[u] = 0;
        for (int i=0;i<G[u].size();i++) {
            Edge &E = edges[G[u][i]];
            if (dist[E.v] > dist[u] + E.w) {
                dist[E.v] = dist[u] + E.w;
               if (!vis[E.v]) {
                q.push(E.v);
                vis[E.v] = 1;
                }
            }
        }
    }
}
void addedge(int u, int v, int w) {
    edges.push_back(Edge{u,v,w});
    G[u].push_back(edges.size()-1);
}

void init() {
for (int i = 1; i <= n; ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发