Pagini recente » Cod sursa (job #1841608) | Cod sursa (job #2042611) | Cod sursa (job #3143172) | Cod sursa (job #1398022) | Cod sursa (job #699678)
Cod sursa(job #699678)
#include<cstdio>
#include<vector>
#include<utility>
#define nmax 50001
#define inf 100000
using namespace std;
int n,m,x,y,c,i;
vector<pair<int,int> > v[nmax];
int d[nmax],pre[nmax],M[nmax],dmin,vfmin;
void citire()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d", &n, &m);
for(i=1;i<=m;i++)
{
scanf("%d%d%d", &x, &y, &c);
v[x].push_back(make_pair(y,c));
}
}
void initializare()
{
int i;
d[1]=0;
M[1]=1;
pre[1]=0;
for(i=2;i<=n;i++)
{
d[i]=inf;
pre[i]=1;
}
for(i=0;i<v[1].size();i++)
d[v[1][i].first]=v[1][i].second;
}
void afisare()
{
for(i=2;i<=n;i++)
if(d[i]!=inf)
printf("%d ", d[i]);
else
printf("0 ");
}
int main()
{
int i,j;
citire();
initializare();
for(j=2;j<n;j++)
{
dmin=inf;
for(i=2;i<=n;i++)
if(!M[i]&&dmin>d[i])
{
dmin=d[i];
vfmin=i;
}
M[vfmin]=1;
for(i=0;i<v[vfmin].size();i++)
{
if(!M[v[vfmin][i].first]&&d[v[vfmin][i].first]>d[vfmin]+v[vfmin][i].second)
{
d[v[vfmin][i].first]=d[vfmin]+v[vfmin][i].second;
pre[v[vfmin][i].first]=vfmin;
}
}
}
afisare();
return 0;
}