Pagini recente » Cod sursa (job #516746) | Cod sursa (job #2803204) | Cod sursa (job #707091) | Cod sursa (job #2768518) | Cod sursa (job #2502331)
#include <bits/stdc++.h>
#define oo 20001
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,start = 1,dMin,VfMin;
short a[32001][32001];
int d[50001],pre[50001];
bool viz[50001];
void Citire()
{
int x,y,c;
f>>n>>m;
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
a[i][j] = oo;
for(int i=1;i<=m;++i)
{
f>>x>>y>>c;
a[x][y] = c;
}
for(int i=1;i<=n;++i)
{
d[i] = a[start][i];
pre[i] = start;
}
d[start] = 0;
pre[start] = 0;
viz[start] = true;
f.close();
}
void Determinare()
{
for(int j=1;j<n;++j)
{
dMin = oo;
for(int i=1;i<=n;++i)
if(!viz[i] && dMin > d[i])
{
dMin = d[i];
VfMin = i;
}
viz[VfMin] = true;
for(int i=1;i<=n;++i)
if(!viz[i] && d[i] > dMin + a[VfMin][i])
{
pre[i] = VfMin;
d[i] = dMin + a[VfMin][i];
}
}
}
int main()
{
Citire();
Determinare();
for(int i=2;i<=n;++i)
if(d[i] != oo) g<<d[i]<<" ";
else g<<0<<" ";
return 0;
}