Cod sursa(job #1616080)

Utilizator ChiriGeorgeChiriluta George-Stefan ChiriGeorge Data 27 februarie 2016 09:38:29
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#define NMAX 105
#define Inf 1000005

using namespace std;

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

int a[NMAX][NMAX], n;

void citire();
void afisare();
void floyd_warshall();

int main()
{
    citire();
    floyd_warshall();
    afisare();
    return 0;
}

void citire()
{
    int i, j;
    fin >> n;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
        {
            fin >> a[i][j];
            if(a[i][j] == 0)
                a[i][j] = Inf;
        }
}

void floyd_warshall()
{
    int x, y, z;
    for(z = 1; z <= n; z++)
        for(x = 1; x <= n; x++)
            for(y = 1; y <= n; y++)
            if(a[x][y] > a[x][z] + a[z][y] && x != y)
            a[x][y] = a[x][z] + a[z][y];
}

void afisare()
{
    int i, j;
    for(i = 1; i <= n; i++)
    {
        for(j = 1; j <= n; j++)
        if(a[i][j] < Inf && i != j)
            fout << a[i][j] << ' ';
        else fout << 0 << ' ';
        fout << '\n';
    }

}

/*
#include <fstream>

using namespace std;

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

int n, a[105][105];

int main()
{
    int i, j, k;
    fin >> n;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
            fin >> a[i][j];
    for(k = 1; k <= n; k++)
        for(i = 1; i <= n; i++)
        for(j = 1; j <= n; j++)
        if(a[i][k] && a[k][j] && (a[i][j] > a[i][k] + a[k][j] || !a[i][j]) && i != j)
            a[i][j] = a[i][k] + a[k][j];
      for(i = 1; i <= n; i++)
      {
        for(j = 1; j <= n; j++)
            fout << a[i][j] << ' ';
        fout << '\n';
      }
    return 0;
}*/