Cod sursa(job #798276)

Utilizator toranagahVlad Badelita toranagah Data 16 octombrie 2012 01:10:58
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
using namespace std;

ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");

int mat[101][101];
int d[101][101];
int N;

int royfloyd(int k, int x, int y);
int min(int a, int b) {
    return a < b ? a : b;
}


int main(int argc, char const *argv[])
{
    fin >> N;
    for (int i = 1; i <= N; ++i) {
        for (int j = 1; j <= N; ++j) {
            fin >> mat[i][j]; 
        }
    }

    for (int i = 1; i <= N; ++i) {
        for (int j = 1; j <= N; ++j) {
            d[i][j] = royfloyd(N, i, j);
        }
    }

    for (int i = 1; i <= N; ++i) {
        for (int j = 1; j <= N; ++j) {
            fout << d[i][j] << ' ';
        }
        fout << '\n';
    }
    return 0;
}

int royfloyd(int k, int x, int y) {
    if (k == 0) {
        return mat[x][y];
    } else {
        return min(royfloyd(k-1, x, y), royfloyd(k-1, k, y) + royfloyd(k-1, x, k));
    }
}