• 图论


    图论 - 最短路 - 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
    ", ans);
    	return 0;
    }
    
  • 相关阅读:
    uva 532
    uva 10557
    uva 705
    uva 784
    uva 657
    uva 572
    uva 10562
    usa物价统计
    2019/6/30,道歉书
    名词收集
  • 原文地址:https://www.cnblogs.com/littleseven777/p/11854788.html
Copyright © 2020-2023  润新知