Cod sursa(job #2124367)

Utilizator DR27092000Bilcu Dragos Gabriel DR27092000 Data 7 februarie 2018 10:19:34
Problema Floyd-Warshall/Roy-Floyd Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("royfloyd.in");
ofstream g("royfloyd.out");
const int inf=10000;
int n,a[101][101],d[1001],p[1001];
void citire()
{f>>n;
 for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
 {int c;
     f>>c;
     a[i][j]=c;
 }
 for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
 {
     if(i==j) a[i][j]=0;
     else if(!a[i][j]) a[i][j]=inf;
 }

}
void dijkstra(int x)
{  int i,j,k,minn;
    for( i=1;i<=n;i++)
        {
           d[i]=a[x][i];
           p[i]=0;

        }
        p[x]=1;
        for( k=1;k<n;k++)

               {
                    minn=inf;
                for( i=1;i<=n;i++)
                if(!p[i] && minn>d[i]) {minn=d[i]; j=i;}




            for( i=1;i<=n;i++)
                if(!p[i] && d[i]>d[j]+a[j][i])
                    d[i]=d[j]+a[j][i];
                p[j]=1;
               }
}
int main()
{citire();
for(int i=1;i<=n;i++)
{
     dijkstra(i);
     for(int j=1;j<=n;j++)
        a[i][j]=d[j];
}
for(int i=1;i<=n;i++)
   {
        for(int j=1;j<=n;j++)
    g<<a[i][j]<<" ";
    g<<'\n';
   }


    return 0;
}