Cod sursa(job #940125)

Utilizator mihai_tMihai Teletin mihai_t Data 15 aprilie 2013 17:50:41
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <iostream>
#define  inf 10000;
using namespace std;
short a[30000][30000];
short d[30000],tata[30000];
struct pereche
{
    int x,y;
} mc[250000];
int n,m,x,y,c,i,j,k;
void cit()
{
    ifstream f;
    f.open("bellmanford.in");
    f>>n>>m;
    for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
                a[i][j]=10000;
    for (int i=0;i<m;i++)
    {
        f>>x>>y>>c;
        a[x][y]=c;
        mc[i].x=x;
        mc[i].y=y;
    }
    f.close();
}
bool bf(int x0)
{
    bool ok;
    for (i=1;i<=n;i++)
    {
        d[i]=10000;
        tata[i]=0;
    }
    d[x0]=0;
    for (k=1;k<=n;k++)
    {
        ok=true;
        for (i=0;i<m;i++)
        {
            if (d[mc[i].x]<10000 && a[mc[i].x][mc[i].y]<10000)
                if (d[mc[i].y]>a[mc[i].x][mc[i].y]+d[mc[i].x])
                {
                    d[mc[i].y]=a[mc[i].x][mc[i].y]+d[mc[i].x];
                    ok=false;
                    tata[mc[i].y]=mc[i].x;
                }
        }
    }
    return ok;
}
int main()
{
    cit();
    ofstream g;
    g.open("bellmanford.out");
    if (!bf(1)) g<<"Ciclu negativ!";
    else
    {
        for (i=2;i<=n;i++)
            g<<d[i]<<" ";
    }
    g.close();
    return 0;
}