Cod sursa(job #728065)

Utilizator cmiNCosmin Poieana cmiN Data 28 martie 2012 14:30:29
Problema Floyd-Warshall/Roy-Floyd Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <iostream>
#include <vector>
using namespace std;


const int INF = 0x3fFFffFE;
vector<vector<int> > mat;
int n;


void solve()
{
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (i == j) continue;
            for (int k = 0; k < n; ++k) {
                int tmp;
                if (mat[i][k] && mat[k][j] && (!mat[i][j] || (tmp = mat[i][k] + mat[k][j]) < mat[i][j])) {
                    mat[i][j] = tmp;
                }
            }
        }
    }
}


void show()
{
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            /*if (mat[i][j] < INF)*/ cout << mat[i][j];
            //else cout << 0;
            cout << ' ';
        }
        cout << '\n';
    }
}


int main()
{
    freopen("royfloyd.in", "r", stdin);
    freopen("royfloyd.out", "w", stdout);
    cin >> n;
    mat.resize(n);
    for (int i = 0; i < n; ++i) {
        mat[i].resize(n);
        for (int j = 0; j < n; ++j) {
            cin >> mat[i][j];
            //if (!mat[i][j]) mat[i][j] = INF;
        }
    }
    solve();
    show();
    fflush(stdout);
    fclose(stdin);
    fclose(stdout);
    return 0;
}