Pagini recente » Cod sursa (job #996347) | Cod sursa (job #1832850) | Cod sursa (job #1864722) | Cod sursa (job #1934290) | Cod sursa (job #1558205)
#include <cstdio>
#define NMax 2005
#define INFINIT 100000000
using namespace std;
int C[NMax][NMax];
int tata[NMax],d[NMax],viz[NMax];
int n,m,x,y,c;
void dijkstra(int x0)
{
int i, j, minim, k, ok;
int viz[NMax], d[NMax], tata[NMax];
for (i = 1; i<=n; i++) {
d[i] = C[x0][i];
tata[i] = x0;
viz[i] = 0;
}
tata[x0] = 0;
viz[x0] = 0;
ok = 1;
while (ok) {
minim = INFINIT;
for (i = 1; i<=n; i++)
if (!viz[i] && minim>d[i]) {
minim = d[i];
k = i;
}
if (minim != INFINIT) {
viz[k] = 1;
for (i = 1; i<=n; i++)
if (!viz[i] && d[i]>d[k]+C[k][i]) {
d[i] = d[k]+C[k][i];
tata[i] = k;
}
}
else ok = 0;
}
for(int i = 2; i <= n; i++){
if(d[i] != INFINIT)
printf("%d ",d[i]);
else
printf("0 ");
}
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; i++){
scanf("%d%d%d",&x,&y,&c);
C[x][y] = c;
C[y][x] = c;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(C[i][j] == 0 && i != j){
C[i][j] = INFINIT;
}
}
}
dijkstra(1);
return 0;
}