Cod sursa(job #894141)

Utilizator bratiefanutBratie Fanut bratiefanut Data 26 februarie 2013 19:57:12
Problema Floyd-Warshall/Roy-Floyd Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#define infinit 999999999

using namespace std;

ifstream f("royfloyd.in");
ofstream g("royfloyd.out");

int n,m,nod_i,nod_f; float a[100][100];

/*void drum(long i, long j)
{
    long long k=1,gasit=0;
    while((k<=n)&&!gasit)
    {
        if(i!=k&&j!=k&&a[i][j]==a[i][k]+a[k][j])
        {
            drum(i,k); drum(k,j);
            gasit=1;
        }
        k++;
    }
    if(!gasit)
    g<<j<<' ';
}

void scriu_drum(long long nod_i,long long nod_f)
{
    if(a[nod_i][nod_f]<infinit)
    {
        g<<a[nod_i][nod_f]<<"\n";
        g<<nod_i<<" ";
        drum(nod_i,nod_f);
    }
}
*/
void lungime_drum()
{
    int i,j,k;
    for(k=1;k<=n;k++)
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    if(a[i][j]>a[i][k]+a[k][j])
    a[i][j]=a[i][k]+a[k][j];
}
int main()
{
    int i,j;
    /*f>>n>>m>>nod_i>>nod_f;
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    if(i==j)
    a[i][j]=0;
    else
    a[i][j]=infinit;
    while(f>>i>>j)
    a[i][j]=a[j][i]=1;
    lungime_drum();
    scriu_drum(nod_i,nod_f);*/
    f>>n;
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    f>>a[i][j];

    lungime_drum();
    for(i=1;i<=n;i++)
    {for(j=1;j<=n;j++)
    g<<a[i][j]<<' ';
    g<<"\n";}

    return 0;
}