Pagini recente » Cod sursa (job #1328266) | Cod sursa (job #484707) | Cod sursa (job #14400) | Cod sursa (job #83112) | Cod sursa (job #856360)
Cod sursa(job #856360)
#include <fstream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define Nmax 50005
#define INF 0x3f
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct arc{
int v,c;
};
vector<arc> a[Nmax];
int n, d[Nmax];
void citire()
{
int m,i,x,y,c;
arc z;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y>>c;
z.v=y;z.c=c;
a[x].push_back(z);
}
}
void BF()
{
queue<int> q;
bool eq[Nmax];
int x;
vector<arc>::iterator it;
memset(d,INF,sizeof(d));
memset(eq,false,sizeof(eq));
q.push(1);d[1]=0;eq[1]=true;
while(!q.empty())
{
x=q.front();q.pop();eq[x]=false;
for(it=a[x].begin();it!=a[x].end();++it)
if(d[it->v]>d[x]+it->c)
{
d[it->v]=d[x]+it->c;
if(!eq[it->v])
{
q.push(it->v);
eq[it->v]=true;
}
}
}
}
void afisare()
{
int i;
for(i=2;i<=n;++i)
if(d[i]==INF)g<<0<<' ';
else g<<d[i]<<' ';
g<<'\n';
}
int main()
{
citire();
BF();
afisare();
return 0;
}