Pagini recente » Cod sursa (job #2916849) | Istoria paginii runda/simlotvrancea2010baraj1 | Cod sursa (job #1359987) | Autentificare | Cod sursa (job #2016652)
#include <cstdio>
using namespace std;
#define inf 1000000
int n,m,c[10000][10000],d[100000],viz[100000];
void Read()
{
int aux1,aux2,co;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%i %i",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i == j)
c[i][j] = 0;
else
c[i][j] = inf;
}
}
for(int i=1;i<=m;i++)
{
scanf("%i %i %i",&aux1,&aux2,&co);
c[aux1][aux2] = co;
}
}
int minim()
{
int loc= 0;
int min = inf;
for(int i=1;i<=n;i++)
{
if(viz[i] == 0 && d[i] != inf)
{
if(d[i] < min)
{
min = d[i];
loc = i;
}
}
}
return loc;
}
void Dijkstra(int nod)
{
int loc;
viz[nod] = 1;
for(int i=1;i<=n;i++)
d[i] = c[nod][i];
for(int i=2;i<=n-1;i++)
{
loc = minim();
viz[loc] = 1;
for(int j=1;j<=n;j++)
{
if(viz[j] == 0)
{
if(d[j] > c[loc][j] + d[loc])
{
d[j] = c[loc][j] + d[loc];
}
}
}
}
}
int main()
{
Read();
Dijkstra(1);
for(int i=2;i<=n;i++)
{
if(d[i] == inf)
d[i] = 0;
printf("%i ",d[i]);
}
return 0;
}