Cod sursa(job #967161)

Utilizator monica11Szekely Monica monica11 Data 27 iunie 2013 11:48:31
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<fstream>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,C[2551][2551],pre[2551],d[2551];
int citire()
{
    int i,j,m,x,y,c;
    f>>n>>m;
    for(i=1;i<=n;i++)
    for(j=i+1;j<=n;j++)
    C[j][i]=C[i][j]=10000;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        C[x][y]=c;
    }
    for(i=1;i<=n;i++)
    {
        d[i]=C[1][i];
        pre[i]=1;
    }
    pre[1]=0;
}
int bellmanford()
{
    int i,j,k;
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    for(k=1;k<=n;k++)
    if(C[j][k]!=10000&&d[k]>d[j]+C[j][k])
    {
        d[k]=d[j]+C[j][k];
        pre[k]=j;
    }
    for(j=1;j<=n;j++)
    for(k=1;k<=n;k++)
    if(C[j][k]!=10000&&d[k]>d[j]+C[j][k])
    return 0;
    return 1;
}
int main()
{
    int i;
    citire();
    if(bellmanford())
    {
        for(i=2;i<=n;i++)
        g<<d[i]<<" ";
    }
    else
    g<<"Ciclu negativ!";
    return 0;
}