Pagini recente » Cod sursa (job #2936820) | Cod sursa (job #953496) | Cod sursa (job #828684) | Cod sursa (job #1999221) | Cod sursa (job #1922792)
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define infinit 9999999
#define nmax 50001
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int d[nmax],frecv[nmax],n,m;
vector < pair <int, int> > C[nmax];
bitset <nmax> inq;
bool bellmanford()
{
int i,j,k;
for(i=1;i<=n;++i)
d[i]=infinit;
d[1]=0;
inq[1]=1;
queue <int> q;
q.push(1);
while(!q.empty())
{
int nod=q.front();
q.pop();
inq[nod]=0;
for(i=0;i<C[nod].size();++i)
{
if(d[C[nod][i].first]>d[nod]+C[nod][i].second)
{
d[C[nod][i].first]=d[nod]+C[nod][i].second;
if(inq[C[nod][i].first])
continue;
++frecv[C[nod][i].first];
if(frecv[C[nod][i].first]>n)
return 0;
inq[C[nod][i].first]=1;
q.push(C[nod][i].first);
}
}
}
return 1;
}
int main()
{
int x,y,dist,i;
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>x>>y>>dist;
C[x].push_back(make_pair(y,dist));
}
if(!bellmanford())
g<<"Ciclu negativ!";
else
for(i=2;i<=n;++i)
g<<d[i]<<' ';
return 0;
}