Cod sursa(job #2282276)

Utilizator ralfd123Amariei Andrei ralfd123 Data 13 noiembrie 2018 15:55:25
Problema Algoritmul Bellman-Ford Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m;
int d[50010];
#define infinit 1010

int main()
{   f>>n>>m; short a[n+1][n+1]; int x1=0,y1=0; short c1=0;

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;++j) if( i != j ) a[i][j]=infinit; else a[i][j]=0;

    while( m )
    {   f>>x1>>y1>>c1; a[x1][y1]=c1;
        m--;
    }

    ///Bellman_Ford

    int ok=0;

    for(int i=1;i<=n;++i) d[i]=infinit;
    d[1]=0;

    for(int i=1;i<=n;++i,ok=0)
    {   for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
                if( d[j] != infinit and a[j][k] != infinit )
                    if( d[k] > d[j] + a[j][k] )
                    {   d[k] = d[j] + a[j][k];
                        ok=1;
                    }
    }

    for(int j=1;j<=n;++j)
        for(int k=1;k<=n;++k)
            if( d[j] != infinit and a[j][k] != infinit )
                if( d[k] > d[j] + a[j][k] )
                    {   g<<"Ciclu negativ!";
                        return 0;
                    }

    for(int i=2;i<=n;++i) g<<d[i]<<" ";

g.close();
return 0;
}