Pagini recente » Cod sursa (job #613168) | Cod sursa (job #1754652) | Cod sursa (job #1125231) | Cod sursa (job #74032) | Cod sursa (job #1402491)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
#define maxn 50001
#define maxm 250001
#define infinit 10000000
int n, m;
vector< pair<int, int> > g[maxn];
queue<int> q;
int d[maxn], viz[maxn];
void bellmanford(int s)
{
int i, nod;
for (i = 1; i <= n; i++)
d[i] = infinit;
d[s] = 0;
q.push(s);
while(!q.empty())
{
nod = q.front();
q.pop();
viz[nod] = 0;
for (i = 0; i < g[nod].size(); i++)
if (d[g[nod][i].first] > d[nod] + g[nod][i].second)
{
d[g[nod][i].first] = d[nod] + g[nod][i].second;
if (!viz[g[nod][i].first])
{
q.push(g[nod][i].first);
viz[g[nod][i].first] = 1;
}
}
}
}
int main()
{
ifstream f("bellmanford.in");
ofstream ff("bellmanford.out");
f>>n>>m;
int a, b, c, i;
for (i = 0; i < m; i++)
{
f>>a>>b>>c;
g[a].push_back(make_pair(b, c));
}
bellmanford(1);
for (i = 2; i <= n; i++)
ff<<d[i]<<' ';
}