[Audiophobia UVA - 10048] [フロイドのアルゴリズム]

影響を受ける:、都市から都市への経路Bに道に沿って可能な限り最小の最大ノイズように。

考えタイトル:セットD [i] [j]はi乃至jの最大ノイズの最小値を表します。次いで、D [I] [J] =分(D [I]、[J]、MAX(D [I] [K]、D [K] [J]));
ACコード

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<vector>
#include<set>
#include<utility>
#include<map>
#include<string>
using namespace std;
const int maxn = 100 + 100;
const int INF = 0x3f3f3f3f;
int C, S, Q;
int c1, c2, d;
int dist[maxn][maxn];
void Floyd()
{
    for(int k = 1; k <= C; k++)
    {
        for(int i = 1; i <= C; i++)
            for(int j = 1; j <= C; j++)
                dist[i][j] = min(dist[i][j], max(dist[i][k], dist[k][j]));
    }
}
int main()
{
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    int cnt = 0;
    while(cin >> C >> S >> Q && C && S && Q)
    {
        ++cnt;
        for(int i = 1; i <= C; i++)
            for(int j = 1; j <= C; j++)
                dist[i][j] = INF;
        for(int i = 0; i < S; i++)
        {
            cin >> c1 >> c2 >> d;
            dist[c1][c2] = dist[c2][c1] = d;
        }
        Floyd();
        if(cnt > 1)
            cout << endl;
        cout << "Case #" << cnt << endl;
        for(int i = 0; i < Q; i++)
        {
            cin >> c1 >> c2;
            if(dist[c1][c2] == INF)
                cout << "no path" << endl;
            else 
                cout << dist[c1][c2] << endl;
        }
    }
}

おすすめ

転載: www.cnblogs.com/KeepZ/p/11443915.html