Cod sursa(job #862057)

Utilizator cristina_hoameaCristina cristina_hoamea Data 22 ianuarie 2013 09:33:47
Problema Algoritmul Bellman-Ford Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<fstream>
#define INF 1000000000
#define NMAX 5010

using namespace std;

ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");

int n, m, start;
int C[NMAX][NMAX], total[NMAX], cmin[NMAX];

void citire();
void initializare();
int bf(int start);
void afisare();

int main()
{

    citire();
    afisare();
    return 0;
}

void citire()
{
    int i, x, y, cost;
    fin>>n>>m; start=1;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(i!=j) C[i][i]=INF;
    for(i=1; i<=m; i++)
        {
            fin>>x>>y>>cost; C[x][y]=cost;
        }
}

int bf(int start)
{
    int i, j, x, op;
    for(i=1; i<=n; i++) cmin[i]=INF;
    cmin[start]=0;
    for(i=1; i<=n; i++)
    {
        op=0;
        for(j=1; j<=n; j++)
            for(x=1; x<=n; x++)
                if(cmin[x]>cmin[j]+C[j][x])
                {
                    cmin[x]=cmin[j]+C[j][x];
                    total[x]=j; op=1;
                }
    }
    return op;
}

void afisare()
{
    int i, x;
    x=bf(start);
    if(x==1) fout<<"Nu exista solutie"<<'\n';
    else
        for(i=2; i<=n; i++) fout<<cmin[i]<<'\n';
    fout.close();
}