UVa 10048 - Audiophobia 簡單Floyd

/**
*   好久沒寫題解了。。。要麼都是大水題。。要麼太難了沒來得及補 T^T
*   今天上個大水吧。。表示我還活着 -_-
*   簡單Floyd:
*       只不過dis[i][j] 表示的是 i->j的路上最大權的最小值。
*   只要在floyd上稍作修改。。就是裸地floyd。。
*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <string>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
#define DEBUG 0
#define INF 0x03ffffff
#define MAXS 105

typedef long long LL;
using namespace std;
int n, m, q, dis[MAXS][MAXS];
void floyd() {
    for(int k = 1; k <= n; k ++) {
        for(int i = 1; i <= n; i ++) {
            for(int j = 1; j <= n; j ++) {
                int tmp = max(dis[i][k], dis[k][j]);
                dis[i][j] = min(tmp, dis[i][j]);
            }
        }
    }
}

void init() {
    for(int i = 1; i <= n; i ++) {
        for(int j = 1;j <= n; j ++) {
            dis[i][j] = INF;
        }
    }
}

int main()
{
    int curCase = 1;
    while(cin >> n >> m >> q) {
        if(!n && !m && !q) break;
        init();
        for(int i = 0; i < m; i ++) {
            int u, v, w;
            cin >> u >> v >> w;
            dis[u][v] = dis[v][u] = w;
        }
        if(curCase != 1) puts("");
        printf("Case #%d\n", curCase ++);
        floyd();
        for(int i = 0; i < q; i ++) {
            int x, y;
            cin >> x >> y;
            if(dis[x][y] == INF) printf("no path\n");
            else cout << dis[x][y] << endl;
        }
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章