Cod sursa(job #947921)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 8 mai 2013 20:37:53
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
///construieste drumul minim de la i la j
///incercand sa treaca prin nodurile intermediare {1,2,3...,k}
#include <fstream>
#define In "royfloyd.in"
#define Out "royfloyd.out"
using namespace std;
int a[102][102],n;
inline void Citire()
{
    ifstream f(In);
    f>>n;
    for(int i = 1 ;i <= n ;i++)
        for(int j = 1 ; j <= n;j++)
            f >> a[i][j];
    f.close();
}

inline void Roy_Floyd()
{
    for(int k = 1 ; k <= n; k++ )
        for(int i = 1; i <= n; i++ )
            for(int j = 1 ;j <= n; j++ )
                if(i != j && a[i][k] &&  a[k][j] && (a[i][j]==0 || a[i][j] > a[i][k] + a[k][j] )  )
                    a[i][j] = a[i][k] + a[k][j];
}

inline void Afisare()
{
    ofstream g(Out);
    for(int i = 1 ;i <= n ;i++)
    {
        for(int j = 1 ; j <= n;j++)
            g << a[i][j]<<" ";
        g<<"\n";
    }
    g.close();
}
int main()
{
    Citire();
    Roy_Floyd();
    Afisare();
    return 0;
}