Cod sursa(job #1045033)

Utilizator sebinechitasebi nechita sebinechita Data 30 noiembrie 2013 19:47:33
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
//nu ii frumos sa te uiti pe sursele altora:))...hotule....nu o sti face singur?:))
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
#define MAX 50010
#define INF 1<<30

vector <pair<int, int> > G[MAX];
queue <int> coada;

int n ,m ,i, j, nod, c[MAX], rez[MAX], x, y, z;

int main()
{
    fin>>n>>m;
    for(i=1;i<=m;++i)
    {
        fin>>x>>y>>z;
        G[x].push_back(make_pair(y, z));
    }
    for(i=2;i<=n;i++)
        rez[i]=INF;
    coada.push(1);
    rez[1]=0;
    while(!coada.empty())
    {
        nod=coada.front();
        coada.pop();

        for(i=0;i<G[nod].size();i++)
        {
            if(rez[nod]+G[nod][i].second<rez[G[nod][i].first])
            {
                rez[G[nod][i].first]=rez[nod]+G[nod][i].second;
                coada.push(G[nod][i].first);
                c[G[nod][i].first]++;
                if(c[G[nod][i].first]>n)
                {
                    fout<<"Ciclu negativ!\n";
                    return 0;
                }
            }
        }
    }
    for(i=2;i<=n;i++)
        fout<<rez[i]<<" ";
    fout<<"\n";
}