Pagini recente » Cod sursa (job #1723644) | Cod sursa (job #3311357) | Cod sursa (job #1962331) | Cod sursa (job #3328549) | Cod sursa (job #2853827)
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#include <iostream>
using namespace std;
#define lim 50010
#define inf 2e9
struct node
{
int direction;
int cost;
};
vector<node> G[lim];
///node,cost
queue<int> q;
int N,M;
int rezultat[lim];
int nrVizitari[lim];
ofstream fout("bellmanford.out");
void dijkstra()
{
rezultat[1] = 0;
q.push(1);
while (!q.empty())
{
int top = q.front();
q.pop();
nrVizitari[top]++;
if(nrVizitari[top] > N)
fout<<"Ciclu negativ!";
for(auto nod : G[top])
{
if(rezultat[nod.direction] > rezultat[top] + nod.cost )
{
rezultat[nod.direction] = rezultat[top] + nod.cost;
q.push(nod.direction);
}
}
}
}
int main() {
ifstream fin("bellmanford.in");
int source, destination, cost;
fin>>N>>M;
for (int i = 1; i <= M; i++) {
fin>>source>>destination>>cost;
G[source].push_back({destination, cost});
}
for (int i = 2; i <= N; i++)
rezultat[i] = inf;
dijkstra();
for(int i = 2 ; i <= N ; i++)
{
if(rezultat[i] == inf)
fout<<0<<' ';
else
fout<<rezultat[i]<<' ';
}
fin.close();
fout.close();
return 0;
}