UVa383 - Shipping Routes

#include <cstdio>
#include <map>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

const int N = 35;
const int INF = 0x3f3f3f3f;

int cnt;
int f[N][N];
map<string, int> strMap;

void floyd_warshall(int n);

int main()
{
    int m, n, p;
    int t;
    string warehouse;
    string s1, s2;
    int size;
    int cost;

#ifndef ONLINE_JUDGE
    //freopen("uva_in.txt", "r", stdin);
    fstream cin("uva_in.txt");
#endif

    //scanf("%d", &t);
    cout << "SHIPPING ROUTES OUTPUT" << endl << endl;;
    cin >> t;
    for (int k = 0; k < t; k++) {
        cout << "DATA SET  " << k + 1 << endl << endl;;
        strMap.clear();
        cnt = 0;
        //scanf("%d%d%d", &m, &n, &p);
        cin >> m >> n >> p;
        for (int i = 0; i < m; i++) {
            cin >> warehouse;
            if (!strMap.count(warehouse)) 
                strMap[warehouse] = cnt++;
        }
            
        for (int i = 0; i < m; i++) {
           for (int j = 0; j < m; j++) {
                if (i == j) f[i][j] = 0;
                else f[i][j] = INF;
           } 
        }
        for (int i = 0; i < n; i++) {
            cin >> s1 >> s2;
            int u = strMap[s1];
            int v = strMap[s2];

            f[u][v] = f[v][u] = 1;
        }

        floyd_warshall(m);

        for (int i = 0; i < p; i++) {
            cin >> size >> s1 >> s2;
            int u = strMap[s1];
            int v = strMap[s2];
            if (f[u][v] == INF) {
                cout << "NO SHIPMENT POSSIBLE" << endl;
            } else {
                cout << "$" << size * f[u][v] * 100 << endl;
            }
        } 
        cout << endl;
    }
    cout << "END OF OUTPUT" << endl;
    return 0;
}

void floyd_warshall(int n) 
{
    for (int k = 0; k < n; k++) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
            }
        }
    }
}

你可能感兴趣的:(UVa383 - Shipping Routes)