Pagini recente » Cod sursa (job #347799) | Cod sursa (job #1767869) | Cod sursa (job #2500425) | Cod sursa (job #130375) | Cod sursa (job #2035620)
#include <cstdio>
#include <vector>
#define INF 2000000000
using namespace std;
int d[50001],f[50001];
vector <pair <int,int> > v[250001];
int main()
{
FILE *fin=fopen ("dijkstra.in","r");
FILE *fout=fopen ("dijkstra.out","w");
int n,m,i,mini,nod,vecin,cost,x,y,z;
fscanf (fin,"%d%d",&n,&m);
for (i=1;i<=m;i++){
fscanf (fin,"%d%d%d",&x,&y,&z);
v[x].push_back (make_pair (y,z) );
}
for (i=2;i<=n;i++)
d[i]=INF;
for (;;){
mini=INF;
for (i=1;i<=n;i++){
if (f[i]==0 && mini>d[i]){
mini=d[i];
nod=i;
}
}
if (mini==INF)
break;
f[nod]=1;
for (vector <pair <int,int> > :: iterator it=v[nod].begin() ; it!=v[nod].end() ; it++){
vecin=it->first;
cost=it->second;
if (f[vecin]==0 && cost+d[nod]<d[vecin])
d[vecin]=cost+d[nod];
}
}
for (i=2;i<=n;i++){
if (d[i]==INF)
d[i]=0;
fprintf (fout,"%d ",d[i]);
}
return 0;
}