Cod sursa(job #280809)

Utilizator igsifvevc avb igsi Data 13 martie 2009 16:19:12
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream.h>

#define xn 101
#define xm 10001

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

int a[xm],b[xm],c[xm],d[xn],t[xn],n,m;

void bellman(int s)
{
     int nr,ok,i;
     
     memset(t,0,sizeof(t));
     memset(d,0x3f3f3f,sizeof(d));
     d[s]=0;
     
     for(ok=nr=1;ok && nr<n;nr++)
       for(ok=0,i=1;i<=m;i++)
         if(d[b[i]]>d[a[i]]+c[i])
         {
            d[b[i]]=d[a[i]]+c[i];
            t[b[i]]=1;
            ok=1;
         }
}

int main()
{
    int i,j,x;
    
    fin>>n;
    for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
      {
         fin>>x; 
         if(x!=0)
           a[++m]=i,b[m]=j,c[m]=x;
      }
    
    for(i=1;i<=n;i++)
    {
         bellman(i);
         for(j=1;j<=n;j++)
           if(t[j])
             fout<<d[j]<<' ';
           else
             fout<<"0 ";
         fout<<'\n';
     }
     
     fout.close();
     return 0;
}