Pagini recente » Cod sursa (job #867190) | Cod sursa (job #2765551) | Cod sursa (job #2872496) | Cod sursa (job #2317236) | Cod sursa (job #899935)
Cod sursa(job #899935)
#include <fstream>
#include <iostream>
#include <cstdio>
using namespace std;
int N,M,cost[50000];
bool viz[50000];
int a[250000][4];
void citire()
{
int i;
cin>>N>>M;
for(i=1;i<=M;i++)
cin>>a[i][1]>>a[i][2]>>a[i][3];
}
void dijkstra()
{
int i,ok=1,min=1,k;
viz[1]=1;
for(i=1;i<=N;i++)
cost[i]=250000000;
for(i=1;i<=M;i++)
if(a[i][1]==1)
cost[a[i][2]]=a[i][3];
while(ok==1)
{
min=250000000;
for(i=2;i<=N;i++)
if(cost[i]<min && viz[i]==0)
{
min=cost[i];
k=i;
}
if(min<250000000)
{
viz[k]=1;
for(i=1;i<=M;i++)
if(a[i][1]==k && viz[a[i][2]]==0 && cost[a[i][2]]>cost[a[i][1]]+a[i][3])
cost[a[i][2]]=cost[a[i][1]]+a[i][3];
}
else
ok=0;
}
}
void afis()
{
int i;
for(i=2;i<=N;i++)
if(cost[i]== 250000000)
cout<<"0"<<" ";
else
cout<<cost[i]<<" ";
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
citire();
dijkstra();
afis();
return 0;
}