Cod sursa(job #1841109)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 5 ianuarie 2017 12:47:55
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("royfloyd.in");
ofstream fout("royfloyd.out");
int n,m,i,d[105][105],x,g[105],c,j;
struct nod{int nd,val;}p;
vector <nod>v[105];
queue <int>C;
int main()
{fin>>n;
 for(i=1;i<=n;i++)
 {for(j=1;j<=n;j++)
     {fin>>x;
      p.nd=j;
      p.val=x;
      if(i!=j&&p.val!=0){v[i].push_back(p);g[i]++;}
     }
 }
 //for(i=1;i<=n;i++)
  // for(j=0;j<n;j++)
   // fout<<v[i][j].val<<" ";
 for(i=1;i<=n;i++)
    {for(j=1;j<=n;j++)
       d[i][j]=1000000000;
     d[i][i]=0;
    }
 for(j=1;j<=n;j++)
 {C.push(j);
  while(C.size()>0)
   {c=C.front();
    C.pop();
    for(i=0;i<g[c];i++)
       {if(v[c][i].val+d[j][c]<d[j][v[c][i].nd]){d[j][v[c][i].nd]=v[c][i].val+d[j][c];
                                           C.push(v[c][i].nd);
                                          }
       }
   }
 }


for(i=1;i<=n;i++)
   {for(j=1;j<=n;j++)
   {if(d[i][j]==1000000000)fout<<"0 ";
        fout<<d[i][j]<<" ";
   }
    fout<<"\n";
   }

}