Pagini recente » Cod sursa (job #140683) | Cod sursa (job #866265) | Cod sursa (job #3250588) | Cod sursa (job #210026) | Cod sursa (job #3151689)
#include <bits/stdc++.h>
using namespace std;
int len[50005];
bool known[50005];
struct nod
{
int n, c;
nod(int a, int b)
{
n=a; c=b;
}
};
vector <nod> v[50005];
int n;
void dijkstra()
{
for (int q=1; q<=n; q++) {
int MINI_DIST=INT_MAX, MINI_NOD=-1;
for (int i=1; i<=n; i++) {
if (known[i]==0) {
if (len[i]<MINI_DIST||MINI_NOD==-1) {
MINI_DIST=len[i];
MINI_NOD=i;
}
}
}
if (MINI_DIST==INT_MAX) break;
known[MINI_NOD]=1;
for (nod nd : v[MINI_NOD]) {
if (known[nd.n]==1) continue;
if (len[MINI_NOD]+nd.c<len[nd.n]) {
len[nd.n]=len[MINI_NOD]+nd.c;
}
}
}
}
int main()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int p;
cin>>n>>p;
int i, j, c;
for (int i=1; i<=p; i++) {
cin>>i>>j>>c;
v[i].push_back(nod(j, c));
}
for (int i=1; i<=n; i++) {
len[i]=INT_MAX;
known[i]=0;
}
len[1]=0;
dijkstra();
for (int i=2; i<=n; i++) {
if (len[i]==INT_MAX) cout<<"0 ";
else cout<<len[i]<<" ";
}
return 0;
}