Programación más corta
# include ltstdio.h gt
# include ltstdlib.h gt
#define infinity 9999
#Definir el número máximo de vértices 20
typedef estructura {
int vexs[MAX _ VERTEX _ NUM]
int arcs; [20][20];
int vexnum, arcnum
} MGraph
void ShortestPath_DIJ(MGraph G, int v0, int D[]){
int *final, min, I, v, w, vex, ruta[20], j, ruta 2[20];
Printf("Ingrese el vértice a alcanzar: " );
scanf("d ", ampvex);
final =(int *)malloc(sizeof(int)* g . vex num);
for(v = 0; v ltg . vixnum; v){
final[v]= 0;
d[v]= g arcos[v 0][. v];
}
for(w = 0; w ltg . vixnum; w ){
if(g . arcs[v 0][w ] lt; infinito)
ruta[w]= v 0;
else ruta[w]=-1;
}
d[v 0]= 0; final[v 0]= 1; ruta[v 0]=-1; i ltg . vixnum; i){
min = infinito;
for(w = 0; w ltg . vixnum um; w)
si(! final[w]){
if(D[w] lt;mínimo){
v = w;
min = D[w];
}
}
final[v]= 1;
for(w = 0; w ltg . vixnum; w)
if (! final[w] amp; amp(min g . arcs[v][w] lt; D[w ])){
d[w]= min g arcos[v][w];
ruta[w]= v;
}
}
Printf("El. la distancia más corta entre dos vértices es d\n\n ", D[vex]);
Printf("Dos vértices El camino más corto entre vértices es: ");
for( w = 0; w ltg . vixnum; w )
ruta 2[w]=- 1;
I = 1; ruta 2[0]= vex; /p>
mientras(ruta[w]! =-1){
ruta 2[i]= ruta[w];
w = ruta[w];
}
for(w = g . vex num-1; w gt=0; w - ){
if(ruta[vex]=
=-1){
Printf("No existe una ruta factible entre d y d", v0, vex
Break;
}< / p>
if(ruta2[w]!=-1)
printf("d ", ruta 2[w]);
}
printf(" \ n ");
printf(" \ n ");
}
int principal(){
< p); >int D[20], I, j, v0m gráfico G;
for(I = 0; i lt20; i)
g . vexs[I]= I;
for(I = 0;i lt20;i)
for(j = 0;j lt20;j)
g . arcos[I][j]=infinito;
g . vex num = 6; g . arcnum = 8;
g . ; g . arcos[0][4]= 30;
g . >g . arcos[2][3]= 50; g . arcos[3][5]= 10;
g . [5]= 60;
for(I = 0;i ltg . vixnum; i ){
for(j = 0;j ltg .vic snum;j) p>
printf("4d", g. arcs[I][j]);
printf("\n");
}
while(1){
Printf("Ingrese el vértice inicial: ");
scanf("d ", ampv 0);
ShortestPath_DIJ( G, v0, D);
}
Sistema("pausa");
}