Cod sursa(job #1242061)

Utilizator alexb97Alexandru Buhai alexb97 Data 13 octombrie 2014 22:17:27
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

#define INF 0x3f3f3f3f

ifstream is ("bellmanford.in");
ofstream os ("bellmanford.out");

void Read();
void Write();
void Bfs(int x);

vector<vector<pair<int, int>>> g;
vector<int> d;
queue<int> q;
vector<int> c;
int n, m;


int main()
{
    Read();
    Bfs(1);
    Write();
    is.close();
    os.close();
    return 0;
}

void Write()
{
    for(int i = 2; i <= n; ++i)
    {
        if(d[i] == INF)
            os << 0 << ' ';
        else
            os << d[i] << ' ';
    }

}

void Read()
{
    is >> n >> m;
    g = vector<vector<pair <int, int>>>(n+1);
    c = vector<int>(n+1);
    d = vector<int>(n+1, INF);
    int x, y, cost;
    for(int i = 1; i <= m; ++i)
    {
        is >> x >> y >> cost;
        g[x].push_back(make_pair(y, cost));
    }
    return ;
}

void Bfs(int x)
{
    q.push(x);
    d[1] = 0;
    int i = 0;
    while (!q.empty())
    {
        i = q.front();
        q.pop();
        /*
         ++c[i];
        if ( c[i] >= n )
        {
            os << "Ciclu negativ!";
            return;
        }
        */
        for(vector<pair<int, int>> :: iterator it = g[i].begin(); it != g[i].end(); ++it)
        {
            if(d[it->first] > d[i] + it->second)
            {
                 d[it->first] = d[i] + it->second;
                 q.push(it->first);
            }
        }
    }


}