Cod sursa(job #967212)

Utilizator monica11Szekely Monica monica11 Data 27 iunie 2013 12:55:34
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<fstream>
#include<vector>
#define pb push_back
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
int n,m,i,x,y,c,cmin[50010],nr[50010],coada[500000];
vector<int> a[50010];
vector<int> cost[50010];
void citire()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        cost[x].pb(c);
        a[x].pb(y);
    }
    for(i=1;i<=n;i++)
    cmin[i]=1000000000;
    cmin[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;
}*/
void bellmanford()
{
    int inc,sf;
    inc=sf=1;
    coada[1]=1;
    while(inc<=sf)
    {
        x=coada[inc++];
        for(y=0;y<a[x].size();y++)
        if(cmin[x]+cost[x][y]<cmin[a[x][y]])
        {
            cmin[a[x][y]]=cmin[x]+cost[x][y];
            coada[++sf]=a[x][y];
            nr[a[x][y]]++;
            if(nr[a[x][y]]>=n)
            {
                g<<"Ciclu negativ!";
                return;
            }
        }
    }
    for(i=2;i<=n;i++)
    g<<cmin[i]<<" ";
}
int main()
{
    int i;
    citire();
    bellmanford();
    return 0;
}