首页 > 其他 > 详细

图论 - 最短路 - Floyd

时间:2019-11-14 09:54:49      阅读:75      评论:0      收藏:0      [点我收藏+]

图论 - 最短路 - Floyd

题目链接: https://www.luogu.org/problem/P2910

代码:

#include <bits/stdc++.h>

using namespace std;

const int N = 110;

const int M = 10010;

int n, m;

int dis[N][N], ord[M];

void Floyd() {
    for (int k = 1; k <= n; k ++ ) {
        for (int i = 1; i <= n; i ++ ) {
            for (int j = 1; j <= n; j ++ ) {
                if (dis[i][j] > dis[i][k] + dis[k][j]) {
                    dis[i][j] = dis[i][k] + dis[k][j];
                }
            }
        }
    }
}

int main() {
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= m; i ++ ) {
        scanf("%d", &ord[i]);
    }
    for (int i = 1; i <= n; i ++ ) {
        for (int j = 1; j <= n; j ++ ) {
            scanf("%d", &dis[i][j]);
        }
    }
    Floyd();
    int ans = 0;
    for (int i = 1; i < m; i ++ ) {
        ans += dis[ord[i]][ord[i + 1]];
    }
    printf("%d\n", ans);
    return 0;
}

图论 - 最短路 - Floyd

原文:https://www.cnblogs.com/littleseven777/p/11854788.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!