文章

28

粉丝

226

获赞

53

访问

145.9k

头像
SPFA
Sacan SVIP
P1565 中国科学院大学2021年机试题
发布于2022年6月30日 20:00
阅读数 5.4k

#include <iostream>
#include <queue>
#define INF 1000000
using namespace std;

int n,m;
const int maxn = 105;

// 图
int gra[maxn][maxn];
// 保存最短路径值。dist[i]表示起点到i点的最短路径值
int dist[maxn];
// 标记。vis[i]=1表示节点i在队列中,vis[i]=0表示不在队列中
int vis[maxn];

void spfa(int s){
    // 初始化
    for(int i = 1;i <= n;i++){
        dist[i] = INF;
        for(int j = 1;j <= n;j++){
            gra[i][j] = INF;
        }
    }

    // 输入
    for(int i = 0;i < m;i++){
        int u,v,w;
        cin >> u >> v >> w;
        gra[u][v] = min(gra[u][v], w);
        gra[v][u] = min(gra[v][u], w);
    }

    // 开始spfa
    priority_queue<int> que;
    que.push(s);
    vis[1] = 1;
    dist[1] = 0;

    while(!que.empty()){
        int now = que.top();
        que.pop();
        vis[now] = 0;

        // 松弛,修改dist,这里和迪杰斯特拉很像
        for(int i = 1;i <= n;i++){
            if(dist[i] >= gra[now][i] + dist[now]){
            ...
登录查看完整内容


登录后发布评论

2 条评论
努力努力在努力
2023年2月24日 14:45

请问初始化graph的时候为啥要取最小值呢?

赞(0)

快乐小土狗 : 回复 努力努力在努力: 初始化的INF表示的是无穷大的意思,取的是最大值

2024年4月2日 20:00