Pagini recente » Cod sursa (job #562729) | Cod sursa (job #1878118) | Cod sursa (job #1605968) | Cod sursa (job #603372) | Cod sursa (job #641687)
Cod sursa(job #641687)
#include <cstdio>
#include <vector>
using namespace std;
const int MAX_N = 50002, inf = 1 << 30;
vector <int> cost[MAX_N], muchii[MAX_N];
int N, M, uz[MAX_N], dist[MAX_N];
void read()
{
int i, x, y, c;
freopen("dijkstra.in","r",stdin);
scanf("%d%d",&N,&M);
for(i=1;i<=M;++i)
{
scanf("%d%d%d",&x,&y,&c);
muchii[x].push_back(y);
cost[x].push_back(c);
}
fclose(stdin);
}
int minim2()
{
int i, nod, c = inf;
for(i=1;i<=N;i++)
if(!uz[i] && dist[i]<c)
c=dist[i], nod=i;
return nod;
}
void dijkstra()
{
int i,j,min;
for(i=2;i<=N;i++)
dist[i]=inf;
for(i=0;i<muchii[1].size();i++)
dist[muchii[1][i]]=cost[1][i];
uz[1]=1;
for(i=1;i<N;i++)
{
min=minim2();
uz[min]=1;
for(j=0;j<muchii[min].size();j++)
if(dist[muchii[min][j]]>dist[min]+cost[min][j])
dist[muchii[min][j]]=dist[min]+cost[min][j];
}
}
void write()
{
int i;
freopen("dijkstra.out","w",stdout);
for(i=2;i<=N;i++)
if(dist[i]==inf)
printf("0 ");
else
printf("%d ",dist[i]);
fclose(stdout);
}
int main()
{
read();
dijkstra();
write();
return 0;
}