Cod sursa(job #1124111)

Utilizator IliescuDanAndreiIliescu Dan Andrei IliescuDanAndrei Data 26 februarie 2014 11:22:49
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream in("bellmanford.in");
ofstream out("bellmanford.out");

struct nod{int cost, fiu; nod(int fiu, int cost) { this->fiu = fiu; this->cost = cost;}};
vector <nod> a[50001];
queue <int> q;
int n, m, d[50001], count[50001];

bool bfs(int x)
{
    q.push(x);
    d[x]=0;
    unsigned int i;
    int y;
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        for(i=0;i<a[x].size();i++)
        {
            y=a[x][i].fiu;
            if(d[x]+a[x][i].cost<d[y])
            {
                d[y]=d[x]+a[x][i].cost;
                q.push(y);
                ++count[y];
                if(count[y]==n) return false;
            }
        }
    }
    return true;
}

int main()
{
    int i, x, y, z;
    in>>n>>m;
    for(i=1;i<=m;i++)
    {
        in>>x>>y>>z;
        a[x].push_back(nod(y, z));
    }
    for(i=1;i<=n;i++) d[i]=250000000;
    if(bfs(1)) for(i=2;i<=n;i++) out<<d[i]<<" ";
    else out<<"Ciclu negativ!";
    return 0;
}