题解 | #【模板】单源最短路2#

【模板】单源最短路2

https://www.nowcoder.com/practice/7c1740c3d4ba4b3486df4847ee6e8fc7

#include <stdio.h>
#include <limits.h>
#define N 5000
int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    int vcost[N][N];
    int distance[N];
    int vstate[N];
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            vcost[i][j] = (i == j) ? 0 : INT_MAX;
        }
    }
    for (int i = 0; i < m; i++) {
        int u, v, w;
        scanf("%d %d %d", &u, &v, &w);
        vcost[u - 1][v - 1] = w;
        vcost[v - 1][u - 1] = w;
    }
    for (int i = 0; i < N; i++) {
        vstate[i] = 0;
        distance[i] = vcost[0][i];
    }
    vstate[0] = 1;

    for (int i = 1; i < N; i++) {
        int min = INT_MAX;
        int k = 0;
        for (int j = 0; j < N; j++) {
            if (vstate[j] == 0 && distance[j] < min) {
                k = j;
                min = distance[j];
            }
        }
        vstate[k] = 1;
        for (int j = 0; j < N; j++) {
            if (vstate[j] == 0 && vcost[k][j] != INT_MAX) {
                if (( distance[k] + vcost[k][j] < distance[j])) {
                    distance[j] = distance[k] + vcost[k][j];
                }

            }
        }
    }
    if (distance[n - 1] != INT_MAX) {
        printf("%d\n", distance[n - 1]);
    } else {
        printf("-1\n");
    }
    return 0;
}

全部评论

相关推荐

坦荡的牛油果拿到了s...:简历最好压缩在一页,期望职位和其他没必要单独一个板块,竞赛经历合并到教育经历里,而且最好获奖了才写。最重要的是实习经历,写得有点简单 一眼看不出来参与的项目具体是什么,具体需求、问题是怎么挖掘、分析、解决的。但是才大一就这么卷了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务