Pagini recente » Cod sursa (job #948309) | Cod sursa (job #1536578) | Cod sursa (job #2522212) | Cod sursa (job #1048318) | Cod sursa (job #877264)
Cod sursa(job #877264)
#include <cstdio>
#include <cstring>
#define N 200000
int a[100][100], d[100];
int s[100], t[100], r, minim, poz;
int n, m;
void citire()
{
scanf("%d %d\n", &n, &m);
int x, y, cost;
memset(a, N, sizeof(a));
for(int i = 1; i < m; i++)
{
scanf("%d %d %d", &x, &y, &cost);
a[x][y] = cost;
}
r = 1;
}
void drum(int i)
{
if(t[i] != 0)
{
drum(t[i]);
printf("%d ", i);
}
else
printf("%d ", i);
}
int main()
{
freopen("dijkstra.in", "r", stdin);
citire();
///step 1
s[r] = 1;
for(int i = 1; i <= n; i++)
{
d[i] = a[r][i];
if(i != r)
if(d[i] < N)
t[i] = r;
}
///step 2
for(int i = 1; i <= n-1; i++)
{
minim = N;
for(int j = 1; j<= n; j++)
if(s[j] == 0)
if(d[j] < minim)
{
minim = d[j];
poz = j;
}
s[poz] = 1;
for(int j = 1; j <= n; j++)
if(s[j] == 0)
if(d[j] > d[poz] + a[poz][j])
{
d[j] = d[poz] + a[poz][j];
t[j] = poz;
}
}
///step 3
for(int i = 1; i <= n; i++)
if(i != r)
{
printf("%d ", d[i]);
//drum(i);
//printf("\n");
}
return 0;
}