Cod sursa(job #796993)

Utilizator ionutmodoModoranu Ionut-Vlad ionutmodo Data 13 octombrie 2012 09:36:14
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#define MAX 2000000000
using namespace std;

int n, a[105][105];

void Read()
{
    ifstream fin("royfloyd.in");
    fin >> n;
    //cout << n << "\n";
    for(int i=1; i<=n; i++)
    {
        for(int j = 1; j<=n; j++)
        {
            fin >> a[i][j];
            if(a[i][j] == 0)
                a[i][j] = MAX;
            //cout << a[i][j] << " ";
        }
        //cout << "\n";
    }
    fin.close();
}
inline bool Diferit(int x, int y, int z)
{
    return (x!=y && y!=z && x!=z);
}
void Solve()
{
    for(int k=1; k<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(a[i][k]!=MAX && a[k][j]!=MAX && (a[i][k]+a[k][j] < a[i][j]) && Diferit(i,j,k))
                    a[i][j] = a[i][k] + a[k][j];
}
void Write()
{
    ofstream fout("royfloyd.out");
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
            if(a[i][j] == MAX)
                fout << 0 << " ";
            else fout << a[i][j] << " ";
        fout << "\n";
    }

    fout.close();
}
int main()
{
    Read();
    Solve();
    Write();
    return 0;
}