Cod sursa(job #2131322)

Utilizator dumitru123Patularu Mihai dumitru123 Data 14 februarie 2018 17:02:52
Problema Algoritmul Bellman-Ford Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
#define nmax 50003
#define inf INT_MAX
int n,m,x,y,cost;
vector < pair < int, int > > matrice[nmax];
queue < int > coada;
int dist[nmax],aparitii[nmax];
bool viz[nmax];
void Read_Graph()
{
    f>>n>>m;
    for(int i=1; i<=m; i++)
    {
        f>>x>>y>>cost;
        matrice[x].push_back(make_pair(y,cost));
    }
}
void Bellman_Ford(int nod)
{
    for(int i=1;i<=n;i++)
        dist[i]=inf;
    dist[nod]=0;
    coada.push(nod);
    viz[nod]=true;
    while(!coada.empty())
    {
        nod=coada.front();
        coada.pop();
        viz[nod]=false;
        for(vector < pair < int, int > > ::iterator it=matrice[nod].begin(); it!=matrice[nod].end(); it++)
            if(dist[it->first]>dist[nod]+it->second)
            {
                dist[it->first]=dist[nod]+it->second;
                if(!viz[it->first] && aparitii[it->first]>n)
                {
                    g<<"Ciclu negativ!";
                    exit(0);
                }
               aparitii[it->first]++;
               viz[it->first]=true;
               coada.push(it->first);
            }
    }
    for(int i=2;i<=n;i++)
        g<<dist[i]<<" ";
}
int main()
{
    Read_Graph();
    Bellman_Ford(1);
    return 0;
}